gpt4 book ai didi

android - 重新启动后,图库中的图像权限丢失

转载 作者:行者123 更新时间:2023-11-29 00:03:25 24 4
gpt4 key购买 nike

我的应用程序允许用户查看从图库或其他位置选择的一些图像。我通过以下方式请求图片的 Uri:

Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, PickerFragment.PICK_PHOTO);

然后在 onActivityResult(int requestCode、int resultCode、Intent 数据)中获取 Uri,并通过以下方式访问这些图像以将它们放入我的应用程序 View 中:

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 我已授予所有权限,例如相机和外部存储的写入和读取权限。

最佳答案

因此,在@greenapps 的大力帮助下,在模拟器和真实设备上进行测试后,解决方案是这样的:

  • 使用另一个 Intent :

    Intent photoPickerIntent = new Intent(Intent.ACTION_OPEN_DOCUMENT);

  • 在 onActivityResult() 中确保 Uri 的持久权限,该权限在应用重新启动后将保持不变:

    Uri selectedImage = data.getData();

    if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN_MR2) {getContentResolver().takePersistableUriPermission (selectedImage, Intent.FLAG_GRANT_READ_URI_PERMISSION|Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

关于android - 重新启动后,图库中的图像权限丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46785237/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com