0

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

0 回答 0