![](/img/trans.png)
[英]How to get write permission on Android 7 SD-card using StorageVolume?
[英]Android: How to get permanent write permission on removable sd-card?
我在最后几天浏览了存储访问框架但仍然没有得到它。
我的问题是:如何在sd-card上创建一个具有这些权限的文件,而不是在选择sd-card位置一次之后选择patha?
我可以在我的SD卡上选择一个路径来创建一个包含以下代码的文件。 (这样可行)
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
intent.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
startActivityForResult(intent, 42);
在onActivityResult我做
@Override
public void onActivityResult(int requestCode, int resultCode, Intent resultData){
if(resultCode!=RESULT_OK)
return;
Uri treeUri=resultData.getData();
pickedDir= DocumentFile.fromTreeUri(getContext(), treeUri);
getContext().grantUriPermission(getContext().getPackageName(), treeUri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
getContext().getContentResolver().takePersistableUriPermission(treeUri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION );
writeFile(pickedDir, "testfile.txt");
}
public void writeFile(DocumentFile pickedDir, String filename) {
try {
DocumentFile file = pickedDir.createFile("text/plain", filename);
OutputStream out = getContext().getContentResolver().openOutputStream(file.getUri());
try {
// write the file content
} finally {
out.close();
}
} catch (IOException e) {
throw new RuntimeException("Something went wrong : " + e.getMessage(), e);
}
}
Uri treeUri=resultData.getData();
保存treeUri以供进一步使用。 供以后使用。
您可以将treeUri.toString()保存为共享首选项中的内容方案路径。
然后检索路径字符串并重建Uri wit Uri.parse(path);
之后,像现在一样使用DocumentFile。
看看getPersistableUriPermissions()。 如果您只使用一个uri,则不必保存,但可以使用此功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.