我正在尝试使用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卡有关?