1

私はこのGoogle Sampleで説明されているディレクトリ選択を使用しています。選択したディレクトリの子のファイル名とMIMEタイプを提供します。私はCOLUMN_DOCUMENT_IDをカーソルクエリに使用すると、ファイルのドキュメントIDも取得できます。 代わりに子どものファイルURIに興味があります。 ACTION_OPEN_DOCUMENT_TREEの代わりにACTION_OPEN_DOCUMENTを使用すると、私は簡単に子を取得します。%2Fchildfile.extention(%2Fは単にスラッシュ)です。だから私は、次のコードを使用して、子ファイルのURIを取得しようとしました - 私が実行したとき(ただしDocumentFileに変換して)、その上に()メソッドが存在するストレージアクセスフレームワークのドキュメントIDからファイルUriを取得する

uri = Uri.parse(docUri.toString()+"%2F"+fileName); 

私は、ファイルの名前を得た、それはfalseを返します。つまり、私はファイルの許可を得ていないか、子供たちを得るための正しい方法ではありません。

私はここで何かが見つからないか、フォルダを選択して、すべてのファイルを簡単に取得することができます。

PS:現在、私はMarshamallowでそれをチェックしています。

答えて

0

ドキュメントを読み、いくつかの例を試した後、私が選択したdocUri/treeUri

uri = DocumentsContract.buildDocumentUriUsingTree(docUri,docId); 

から単一のファイルのURIを取得するには、以下の方法を持って、あなたは以下の使用DocumentFileにいつでもそれを変換することができますコード - それはfile.exists()メソッド呼び出しにtrueを返すことができるように

DocumentFile file = null; 
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
    if (DocumentsContract.isDocumentUri(context, uri)) { 
     file = DocumentFile.fromSingleUri(context, uri); 
    } else { 
     file = DocumentFile.fromTreeUri(context, uri); 
    } 
} 

fromTreeUri()方法は、選択されたツリーのディレクトリに必要です。
子ディレクトリにディレクトリが含まれている場合は、childDirectory.listFiles()を呼び出すことはできません。子ディレクトリのファイルにアクセスする権限がないため、UnsupportedOperationExceptionと表示されます。詳しくはhereをご覧ください。

関連する問題