我正在创建可以显示图像的 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
);