作者:24吴梦琦_581 | 来源:互联网 | 2023-05-24 09:35
我在我的应用程序中使用KITKAT内容提供程序.在获得所选图片的uri之后,我将其存储在数据库中以便稍后再次使用它.问题是重启手机后,我在使用存储的uri时获得了权限异常.
搜索后我尝试使用takePersistableUriPermission()但由于某种原因它不编译(我使用androidstudio).
错误是:必须是IntentFLAG_GRANT_READ_URI_PERMISSION或Intent.FLAG_GRANT_WRITE_URI_PERMISSION中的一个或多个.它发生在方法takePersistableUriPermission(标志)的第二个参数上
这是代码:
Intent intent;
if (Build.VERSION.SDK_INT <19){
intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, ANDROID_LESS_19);
} else {
intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
startActivityForResult(intent, ANDROID_MORE_19);
}`
case ANDROID_MORE_19:
if(resultCode == RESULT_OK){
Uri selectedImage = data.getData();
mImage = selectedImage.toString();
String[] filePathColumn = {MediaStore.Images.Media.DATA};
// this part means to keep permanent permissions, so no exception after rebooting the device
final int takeFlags = data.getFlags()
& (Intent.FLAG_GRANT_READ_URI_PERMISSION
| Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
getContentResolver().takePersistableUriPermission(selectedImage, takeFlags);
grantUriPermission("com.main.bonappetit", selectedImage, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
Cursor cursor = getContentResolver().query(
selectedImage, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
cursor.close();
有人知道这里有什么问题吗?
1> Jerome..:
在Android Studio上,我不得不分解该行以便能够编译:
int takeFlags = data.getFlags();
takeFlags &= (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);