我正在创建可以显示图片的Android应用。它还允许删除它们。处理可移动SD卡(KitKat
及以上)时遇到问题。
我提示用户授予SD卡权限:
startActivityForResult(new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE), REQUEST_SD_CARD_PERMISSION);
这是onActivityResult(int requestCode, int resultCode, Intent data)
中的代码:
if (requestCode == REQUEST_SD_CARD_PERMISSION && resultCode == RESULT_OK) {
int takeFlags = data.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
Uri uri = data.getData();
getContentResolver().takePersistableUriPermission(uri, takeFlags);
}
我有像这样形式的图像uris:/storage/7255-A3FF/test/gtfht.jpeg
当我在调用takePersistableUriPermission(Uri,int)后尝试删除它时:
new File("/storage/7255-A3FF/test/gtfht.jpeg").delete();
我得到例外:
EACCES (Permission denied) : /storage/7255-A3FF/test/gtfht.jpeg
从内部存储中删除文件工作正常(授予WRITE_EXTERNAL_STORAGE权限)。
我做错了什么?甚至可以使用其路径删除文件?如果不是怎么做?
我想避免用户使用Intent.ACTION_OPEN_DOCUMENT选择每个文件的情况。
编辑:
我有来自
的图像的文件系统路径 String[] projection = new String[]{
MediaStore.Images.Media.BUCKET_DISPLAY_NAME,
MediaStore.Images.Media.DATA,
MediaStore.Images.Media._ID
};
Cursor cur = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
projection,
null,
null,
null
);