簡體   English   中英

Android:如何獲得可移動SD卡的永久寫入權限?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM