![](/img/trans.png)
[英]Permission Denial: opening provider com.android.providers.media.MediaDocumentsProvider
[英]Permission Denial media documents provider
我想从图库中选择图片,然后保存路径。 我使用此路径在RecyclerView
显示图像。 我使用Picasso
在ImageView
下载图像。 我的问题如下:
当我选择该图像正确显示在RecyclerView
,但是如果我离开屏幕并返回,则会出现此错误:
01-19 15:05:18.984 542-840 /? W / ActivityManager:权限拒绝:从...打开提供程序com.android.providers.media.MediaDocumentsProvider需要android.permission.MANAGE_DOCUMENTS或android.permission.MANAGE_DOCUMENTS
并且图像不再显示。 这是我的代码:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS"/>
AlertDialog.Builder builder = new AlertDialog.Builder(getMainActivity());
builder.setTitle("Choose Image Source");
builder.setItems(new CharSequence[] {"Gallery"},
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
Intent intent;
// GET IMAGE FROM THE GALLERY
intent = new Intent(Intent.ACTION_GET_CONTENT, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true); // Show local files only (available since honeycomb, sdkVersion 11)
startActivityForResult(Intent.createChooser(intent, "Choose a picture"), Constants.REQUEST_CHOOSE_PHOTO);
}
});
builder.show();
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
ImageDb image = new ImageDb();
if (resultCode == Activity.RESULT_OK) {
switch (requestCode) {
case Constants.REQUEST_CHOOSE_PHOTO:
image.setImageFilePath(data.getData().toString());
break;
}
images.add(image);
}
}
@BindingAdapter({"url", "size"})
public static void loadImage(ImageView imageView, String url, float size) {
if (!Strings.isNullOrEmpty(url)) {
Picasso.with(imageView.getContext()).load(url).resize((int) size, (int) size).centerCrop().into(imageView);
}
}
有人知道问题出在哪里吗?谢谢!
我想从图库中选择图片,然后保存路径
那是行不通的。 当您使用ACTION_GET_CONTENT
, 您具有使用返回的Uri
临时权限 。
另请注意, ACTION_GET_CONTENT
在Intent
中不使用Uri
。 摆脱android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI
。
有人知道问题出在哪里吗?
您正在尝试使用稍后返回的Uri
。 接收到Uri
的实例组件(在本例中为活动)有权使用它,但您的应用程序中没有其他操作。
在某些情况下,您可以将访问权限传播到其他组件实例。 例如,假设活动A具有问题代码,然后在其中调用startActivity()
启动活动B。默认情况下,活动B将无权访问Uri
标识的内容。 但是,活动A可以将FLAG_GRANT_READ_URI_PERMISSION
标志添加到它与startActivity()
一起使用的Intent
,并传递对活动B的读取访问权限。
但是,其他形式的导航(例如BACK按钮)不提供此功能,更不用说将Uri
保留为字符串并在明天或下周尝试使用它了。
如果您在Android 4.4+上切换到ACTION_OPEN_DOCUMENT
,则可以尝试在ContentResolver
上使用takePersistableUriPermission()
,在这种情况下,您可以永久访问该内容。
否则,如果您正在寻找对内容的长期访问,则需要将内容(例如,复制映像)复制到您控制的存储器(例如, 内部存储器 )中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.