gpt4 book ai didi

java - 在我的项目中实现 ACTION_OPEN_DOCUMENT 时遇到问题

转载 作者:太空狗 更新时间:2023-10-29 15:50:25 25 4
gpt4 key购买 nike

我有 AddActivity,它可以让您从相机拍摄的照片或从图库中选择的图像中获取 URI。然后就可以去DetailsActivity查看图片了。在您重新启动设备之前,我现在可以正常工作。在您重新启动并尝试转到该图像的 DetailsActivity 后,这是错误:

Caused by: java.lang.SecurityException: Permission Denial: opening provider com.android.providers.media.MediaDocumentsProvider from ProcessRecord{3a5e86d 2915:jeremy.com.wineofmine/u0a321} (pid=2915, uid=10321) requires that you obtain access using ACTION_OPEN_DOCUMENT or related APIs

我去了"Open Files Using Storage Access Framework" Android 开发页面并阅读 Persist Permissions 部分。不过,我在将它应用到我的项目时遇到了问题。

我认为我不明白的主要事情是您似乎需要调用一个 Intent (在我的例子中是在 DetailsActivity 中),但我什至没有一个 Intent 。

这是让您选择图库图像的 Intent 。这是在 AddActivity 中:

Intent intentGallery = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intentGallery.addCategory(Intent.CATEGORY_OPENABLE);
intentGallery.setType("image/*");
intentGallery.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intentGallery.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
startActivityForResult(intentGallery, SELECT_IMAGE);

在 DetailsActivity 中,这是它实际崩溃的地方:

imageURI = Uri.parse(cursor.getString(cursor.getColumnIndexOrThrow(WineContract.WineEntry.COLUMN_WINE_IMAGE)));

bitmap = null;
try {
//If the cursor does not have anything in the image column, set the image to null, with a height so the textviews look decent
if (cursor.isNull(cursor.getColumnIndexOrThrow(WineContract.WineEntry.COLUMN_WINE_IMAGE))){
mFullImage.setImageBitmap(null);
mFullImage.setMaxHeight(300);
}else{
//remake the bitmap from the URI in the image column
//********This next line is where the program crashes**********
bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageURI);
mFullImage.setImageBitmap(bitmap);

}

我能否获得一些帮助来弄清楚如何将其应用到我的项目中?

最佳答案

如下处理权限结果覆盖 onRequestPermissionsResult

 @Override
public void onRequestPermissionsResult (int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case General.REQUESTPERMISSION:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//reload my activity with permission granted or use the features that required the permission

} else {
Messenger.makeToast(getContext(), R.string.noPermissionMarshmallow);
}
break;
}
}

并在您的 onActivityResult 方法中持久化权限实现,如下所示

@Override
public void onActivityResult (int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//if ok user selected a file
if (resultCode == RESULT_OK) {
Uri sourceTreeUri = data.getData();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
getContext().getContentResolver().takePersistableUriPermission(sourceTreeUri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
}
}
}

关于java - 在我的项目中实现 ACTION_OPEN_DOCUMENT 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46916992/

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