android - 接收器应用程序 - 处理 Intent 过滤器 URI 的权限

标签 android android-intent uri intentfilter android-contentresolver

我对 Android 的整个 Fileprovider 感到非常困惑。我整天都在看视频和看其他帖子......我希望有人能尽快帮助我。

我有一个应用程序可以处理图像/PDF 等...并将它们上传到服务器。为此,我在我的输入 Activity 中实现了一个 Intent 过滤器。

   <intent-filter>
            <action android:name="android.intent.action.SEND_MULTIPLE" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="image/*" />
        </intent-filter>

该 Activity 获取 Intent ,但将其数据发送到另一个 Activity 。

   (intent.getParcelableArrayListExtra<Parcelable>(Intent.EXTRA_STREAM) as? ArrayList<Uri>)?.let {
        activity.startActivity(MainActivity.newInstance(activity, it))
    }

 public static Intent newInstance(@NonNull Context context, @NonNull ArrayList<Uri> images) {
    Intent intent = new Intent(context, MainActivity.class);
    intent.putParcelableArrayListExtra(INTENT_EXTRA_IMAGES, images);
    intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION|Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
    return intent;
}

该 Activity 尝试使用 contentresolver 读取 Uri

val openInputStream = context.contentResolver?.openInputStream(originalFileUri)

但是这样做时它会崩溃 - 有时......

如果我分享了图库应用程序中的照片,一切正常。如果我分享下载文件夹中的照片,那么我会得到

java.lang.SecurityException: Permission Denial: opening provider com.android.providers.downloads.DownloadStorageProvider from ProcessRecord{40bd561 8082:APPNAME/u0a749} (pid=8082, uid=10749) requires that you obtain access using ACTION_OPEN_DOCUMENT or related APIs

如果我将 Whatsapp 中的照片分享到我的应用程序,我会得到

java.lang.SecurityException: Permission Denial: opening provider com.whatsapp.contentprovider.MediaProvider from ProcessRecord{a684e0e 6544:APPNAME/u0a749} (pid=6544, uid=10749) that is not exported from UID 10140

我不明白为什么会这样......

最佳答案

That activity gets the intent, but sends its data to another activity.

这并不是很理想。

但是,如果您必须这样做,请将 FLAG_GRANT_READ_URI_PERMISSION(如果需要的话,添加 FLAG_GRANT_WRITE_URI_PERMISSION)添加到您用于的 Intent 中启动MainActivity。否则,MainActivity may not have permission to work with the content .

关于android - 接收器应用程序 - 处理 Intent 过滤器 URI 的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60655676/

相关文章:

android - 仅向一个应用程序发送广播 Intent ,而不使用显式 Intent

android-intent - 从 native 代码发送广播意图失败

url - SEO 和 URI 结构

java - 如何从 Firebase 存储获取 URL getDownloadURL

android - ADB 安装失败并显示 INSTALL_FAILED_TEST_ONLY

android - 如何在回收 View 中获取选定单选按钮的值?

android - 在 android 棉花糖上获取 realPath 返回 null?

java - FirebaseFirestore 中的多个 whereEqualTo 条件

android - 当我点击按钮(Intent)打开它时,谷歌地图在我的应用程序上崩溃

java - 如何在 MongoDB 的 application.properties 中设置等待队列倍数和最大池大小