当我用新的microSD卡替换它时,如何知道与当前microSD卡相关的URI

时间:2019-06-11 08:31:27

标签: android storage-access-framework

我正在尝试使用SAF(存储访问框架)在外部microSD上构建具有文件访问权限的android应用。目标android操作系统版本为N. 这是相同的代码。

StorageManager sm = (StorageManager) getSystemService(Context.STORAGE_SERVICE);
assert sm != null;
List<StorageVolume> volumeList = sm.getStorageVolumes();
StorageVolume sdCardVolume = null;
for (StorageVolume volume : volumeList) {
    if (volume.isRemovable()) {
        sdCardVolume = volume;
        break;
    }
}
if (sdCardVolume != null) {
    Intent accessSDCardIntent = sdCardVolume.createAccessIntent(null);
    if (accessSDCardIntent != null)
        startActivityForResult(accessSDCardIntent, REQUEST_CODE_EXTERNAL_SD);
    else
        Log.e("sss", "createAccessIntent return null");
} else {
    // no external sdcard found
    Log.e("sss", "No external sdcard found.");
}

具有onActivityResult的代码为

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_CODE_EXTERNAL_SD) {
        switch (resultCode) {
            case RESULT_OK:
                //data uri
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                    Uri mUri = data.getData();
                    if (mUri != null) {
                        getContentResolver().takePersistableUriPermission(mUri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
                    }
                }
                break;
            case RESULT_CANCELED:
                finish();
                break;
        }
    }
}

当我插入第一个microSD卡时,它可以正常工作。我可以使用getContentResolver()。getPersistedUriPermissions()获取持久性URI

但是当我用microSD卡替换时,我不能使用以前的URI来访问其中的文件。然后,我必须再次调用createAccessIntent以获得新的URI权限。

问题是当我现在调用getContentResolver()。getPersistedUriPermissions()时,我可以获得两个不同的URI权限。我怎么知道哪一个与新的microSD卡有关?

0 个答案:

没有答案