Android 通过Intent.ACTION\u视图打开映像时出现安全异常。棒棒糖

Android 通过Intent.ACTION\u视图打开映像时出现安全异常。棒棒糖,android,Android,在我的应用程序中,我有一个从standart android(棒棒糖)文件选择器中选择的图像列表。每个图像都有类似的URIcontent://com.android.providers.media.documents/document/image%3A105628. 图像选择代码: Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); intent.addCategory(Intent.CATEGORY_OPENABLE); i

在我的应用程序中,我有一个从standart android(棒棒糖)文件选择器中选择的图像列表。每个图像都有类似的URIcontent://com.android.providers.media.documents/document/image%3A105628.

图像选择代码:

 Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
 intent.addCategory(Intent.CATEGORY_OPENABLE);
 intent.setType("image/*");
 startActivityForResult(intent, SELECT_IMAGE_ACTIVITY_REQUEST_CODE);
通过单击列表意图中的图像并调用操作视图。和视图应用程序崩溃,但有例外

图像视图的代码:

Intent viewIntent = new Intent(Intent.ACTION_VIEW);
viewIntent.setDataAndType(finalPhoto, "image/*");
startActivity(viewIntent);
例外情况:

java.lang.SecurityException: Permission Denial: opening provider com.android.providers.media.MediaDocumentsProvider from ProcessRecord{247dd26c 18416:com.google.android.apps.plus/u0a51} (pid=18416, uid=10051) requires android.permission.MANAGE_DOCUMENTS or android.permission.MANAGE_DOCUMENTS
            at android.os.Parcel.readException(Parcel.java:1540)
            at android.os.Parcel.readException(Parcel.java:1493)
            at android.app.ActivityManagerProxy.getContentProvider(ActivityManagerNative.java:3267)
            at android.app.ActivityThread.acquireProvider(ActivityThread.java:4589)
            at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:2439)
            at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1442)
            at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1064)
            at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:921)
            at android.content.ContentResolver.openInputStream(ContentResolver.java:646)
            at jcq.a(PG:129)
            at dcv.f(PG:28)
            at dcv.j(PG:16)
            at hxz.d(PG:40)
            at df.e(PG:242)
            at dg.a(PG:51)
            at dg.c(PG:40)
            at dx.call(PG:123)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:818)
我了解了SAF,是否可以将授予的权限从我的应用程序委托给另一个应用程序(查看器)


PS:我看到了这个解决方法

您应该将其添加到您的清单中:

<uses-permission android:name="android.permission.MANAGE_DOCUMENTS"/>

在那之后,它应该会起作用


编辑 也许你可以看看这个答案:


另外,安卓KitKat安全例外回答对您有帮助吗?

您应该将此添加到清单中:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

答案是添加这个标志
intent.addFlags(intent.flag\u GRANT\u READ\u URI\u PERMISSION)

要执行操作,请查看意图

我已拥有此权限。我知道“需要android.permission.MANAGE_文档”是什么意思@我改变了我的答案
    Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
    photoPickerIntent.setType("image/*");
    startActivityForResult(photoPickerIntent, REQUEST_CODE_GALLERY);