【发布时间】:2018-01-28 09:34:33
【问题描述】:
我的应用收到了几份崩溃报告,邮件为java.lang.SecurityException。当应用程序尝试获取用户从其图像中选择的图像 URI 的持久权限时,就会发生这种情况。
选择图像的方法是通过意图:
public static Intent openGalleryToSelectImages(Activity a)
{
Intent intent = new Intent();
// Set action
if( Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
}
else {
intent.setAction(Intent.ACTION_GET_CONTENT);
}
// Set MIME type and allow multiple selection
intent.setType("image/*");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
}
a.startActivityForResult(Intent.createChooser(intent,"Select Picture"), Communication.REQUEST_SELECT_IMAGES_FROM_GALLERY);
return intent;
}
然后我在接收到的 URI 数组上执行一些操作。 当我尝试获得每个 URI 的持久读取权限时,就会发生崩溃:
activity.grantUriPermission(activity.getPackageName(), uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
activity.getContentResolver().takePersistableUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
但我无法弄清楚这有什么问题。 除此之外,该应用在多款智能手机上都能正常运行,因此它似乎与特定供应商绑定。
编辑: 我无法对导致崩溃的设备进行深入分析。 在我的开发设备上,图像的 URI 类似于:
content://com.android.providers.media.documents/document/image%3A796
【问题讨论】:
-
Noguat 设备崩溃??如果是这样,请查看此博客link。
-
你的
uri喜欢什么?尝试致电Log.d并观看日志猫 -
我无法检查导致崩溃的设备中的 URI。在我的开发设备上,URI 类似于: content://com.android.providers.media.documents/document/image%3A796
-
您不拥有
com.android.providers.media.documents内容提供者,因此您无法授予该 uri 的任何权利 -
但在我的开发设备上它运行良好(3 个智能手机和 1 个平板电脑)。您的意思是 URI 在其他设备中有所不同吗?
content://com.android.providers.media.documents/document/image%3A796是关于我的一台设备的示例,但我认为它会在其他制造商的设备上发生变化。
标签: android android-intent android-permissions android-image