2017-10-22 9 views
0

私は意図を呼んでいるSDカードのルートに権限を付与した後DocumentFileでファイルを書き込むためのサブフォルダに権限がありません:その後、永続化の許可を取ってこの使用

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE); 
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 
startActivityForResult(intent, 42); 

を、私の外付けSDカードのルートを選択しますこの使用:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == 42) { 
     Uri treeUri = data.getData(); 
     this.getContentResolver().takePersistableUriPermission(treeUri, (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION)); 
    } 
} 

を私はルート(私の最初の選択)にOutputStreamを使用してファイルを書き込むことができますが、私は、私は彼らに許可を求めない限り、再び任意の他のサブフォルダに書き込み、明示的に選択することはできません。

私は権限を持っているフォルダを決定するために何もしていません。私はPOCを作成し、選択して権限を与えられたフォルダのサブフォルダにファイルを書き込もうとしています。私は明示的にそれが動作するサブフォルダに許可を与えた場合は、再度

DocumentFile dir = DocumentFile.fromTreeUri(cont, Uri.parse(myUriToRoot+"/subfolder")); 
    DocumentFile destination = dir.createFile("image/jpeg", "myfile.jpg"); 

:私はこれを使用して以下の宛先変数のDocumentFileオブジェクトにはnull例外を取得します。私が読んだことでは、既存のすべてのサブフォルダと、あなたが許可したフォルダの下にある新しく作成されたフォルダは、ファイルへのアクセスを許可する必要がありますが、私のためには機能しません。

私には何が欠けていますか?

TIA

編集:私はまた私のURIにスラッシュ用URLエンコード文字を使用して試しても私は私の意図に別の電話に直接サブフォルダを選択しない限り動作しません。

答えて

0

fromTreeUri()メソッドを直接サブフォルダに設定し、ルートに保持してから別のDocumentFileオブジェクトでfindFileを使用し、その次のDocumentFileオブジェクトでcreateFileを使用する代わりに、これを解決できました。