【发布时间】:2017-10-17 07:56:51
【问题描述】:
我的应用程序允许用户从图库或其他位置查看一些选定的图像。我通过以下方式请求 Uri 的图像:
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, PickerFragment.PICK_PHOTO);
然后在 onActivityResult (int requestCode, int resultCode, Intent data) 中获取 Uri 并通过以下方式访问这些图像以将它们放在我的应用的视图中:
Uri imageUri= data.getData();
应用完成后,我将数据库中的所有 Uri 保存为字符串:
String imageUriString = imageUri.toString();
saveToDB (imageUriString);
但是,当我重新启动应用程序并通过以下方式从我的数据库中恢复所有 Uri 时:
String imageUriString = restoreFromDB ();
imageUri = Uri.parse (imageUriString);
在 Android 7.1 中,该应用不再拥有这些 Uri 的权限。 我正在通过以下方式访问图像:
ContentResolver cr = mContext.getContentResolver();
InputStream is = cr.openInputStream(imageUri);
BitmapFactory.decodeStream(is, null, o);
但收到此异常:
java.lang.SecurityException: Permission Denial: opening provider com.google.android.apps.photos.contentprovider.impl.MediaContentProvider from ProcessRecord
是否有一种优雅且合法的方式来保留该权限? 我试图阅读所有有关权限的文档,但感到非常困惑。
如果您能告诉我正确的学习方向,将不胜感激。
PS 在 Uri 的许可持续期间将图像复制到应用程序内存是一种选择,但我想避免这种情况。至少看看有没有可能。
PPS 我已授予所有权限,例如相机和外部存储写入和读取。
【问题讨论】:
-
存储 byteArray 而不是 uri。当图库中不存在图像时,Uri 失败。
-
@Anonymous,存储是一种选择,但不可取。在我的情况下,即使图像 出现在图库中,Uri 也会失败
-
确实很奇怪,因为据我所知 ACTION_PICK 没有权限标志。早些时候,只有 ACTION_GET_CONTENT 受此影响。但我可以确认你的问题。更改为 ACTION_GET_CONTENT 无济于事,因为您无法使权限保持不变。
-
未经测试:使用 ACTION_OPEN_DOCUMENT。未经测试。请尝试报告。
标签: android image permissions gallery