Android - 使用其路径(Kitkat及以上版本)

时间:2017-08-03 21:24:17

标签: android android-4.4-kitkat android-sdcard android-storage

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

0 个答案:

没有答案