在我的应用程序中,用户可以通过使用androidX方法打开画廊并选择他们的图片。
到目前为止,这个功能运行得非常完好。通过在适配器中添加Uri,我的相册组件可以显示图像。问题是我将它们保存在数据库中,当我重启应用程序时,权限被吊销,导致应用程序崩溃。我尝试为每个项在回调函数中添加以下内容:
但是我遇到了这个错误:
但是我遇到了这个错误:
registeredIntent = registerForActivityResult(new ActivityResultContracts.GetMultipleContents(), this);
而结果的回调是在这个方法中发送的:
@Override
public void onActivityResult(List<Uri> result) {
if(result != null && result.size() > 0) {
sliderImageAdapter.addItems(result);
binding.includeResultTask.imageSlider.setSliderAdapter(sliderImageAdapter, true);
}
}
到目前为止,这个功能运行得非常完好。通过在适配器中添加Uri,我的相册组件可以显示图像。问题是我将它们保存在数据库中,当我重启应用程序时,权限被吊销,导致应用程序崩溃。我尝试为每个项在回调函数中添加以下内容:
requireActivity().getContentResolver().takePersistableUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
但是我遇到了这个错误:
Permission Denial: opening provider com.android.providers.media.MediaDocumentsProvider from ProcessRecord{41a7dce 26094:it.ilogreco.levelup/u0a482} (pid=26094, uid=10482) requires that you obtain access using ACTION_OPEN_DOCUMENT or related APIs
我甚至尝试使用以下方式对每个项目进行操作:
context.grantUriPermission(context.getPackageName(), uri, FLAG_GRANT_READ_URI_PERMISSION);
但是我遇到了这个错误:
UID 10482 does not have permission to content://com.android.providers.media.documents/document/image%3A108953 [user 0]; you could obtain access using ACTION_OPEN_DOCUMENT or related APIs
我使用registerForActivityResult一次性加载Uris并将它们保存到数据库中,但是我无法再次使用API打开媒体库,因为这没有意义,你有什么办法可以获得这些权限吗?我想避免在回调中复制内容。