ファイルの代わりにフォルダを選択すると、DocumentFileからファイルのリストにアクセスできます。Intent.ACTION_OPEN_DOCUMENTから取得したUriフォルダの内容を調べる
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
intent.setFlags(FLAG_READ_WRITE|FLAG_PERSIST);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType(TYPE_ANY);
String [] mimeTypes = {TYPE_IMAGE,TYPE_VIDEO};
intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes);
startActivityForResult(intent, REQUEST_CODE_SELECT_VIDEOS);
onActivityResult
で、その後、 (彼らはあなたが彼らの名に期待するものですFLAG_...
とTYPE_...
をneverming):
if (resultCode == Activity.RESULT_OK) {
if (resultData != null) {
Uri uri = resultData.getData(); // try to get only one element
if (uri!=null){ // data is available as ClipData because multiple items were selected
Log.i(TAG, "Uri: " + uri.toString());
selectedDocs.add(uri);
}else{
ClipData data = resultData.getClipData();
for(int i=0;i<data.getItemCount();i++){
ClipData.Item item = data.getItemAt(i);
Uri aUri = item.getUri();
selectedDocs.add(aUri);
}
Log.i(TAG, "handleReadRequestResult: data=" + data.toString());
}
}else{
Log.e(TAG, "handleReadRequestResult: resultData is null");
handleIssues();
}
}else{
Log.e(TAG, "handleReadRequestResult: resultCode is not OK");
handleIssues();
}
しかし、私がしようとすると、私はこのような意図を呼び出していますURIを読んで、2例があります。 (ⅰ)現在のウリは、「ファイルです」と、(ii)海流ウリは
「フォルダです」編集:私は言ったように、ケース(ii)はデフォルトの動作ではありません。 (?複数選択モード) - :、とかで作業 私はフォルダをlongtappingすることでこれを再現することができ
を(i)の場合には、私がこれを行うことができます。問題は(ii)の場合です。ここでは、利用可能なファイルをリストしたいと思います。
注:new Intent(Intent.ACTION_OPEN_DOCUMENT)
を呼び出すと、uri.toString()=content://com.android.externalstorage.documents/document/BEAE-19F8%3AFolderName
が得られますが、new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
の場合はuri.toString()=content://com.android.externalstorage.documents/tree/BEAE-19F8%3AFolderName
となります。
ここでの違いは意図がIntent.ACTION_OPEN_DOCUMENT_TREE
あるとき、私はDocumentFile df = DocumentFile.fromTreeUri(getApplicationContext(),uri)
を行うことができ、その後、df.listFiles
(他のケースのために失敗した)
を必要としています。だからあなたの問題の説明は間違っています。 – greenapps
'ACTION_OPEN_DOCUMENT'が「フォルダ」(すなわち、本当に文書ツリーである「文書」)を返す場合、IMHOはバグです。複数選択モードであっても、ユーザーは文書を選択することができます。 – CommonsWare
フォルダをロングタップしてこの動作を生成できます(複数選択モード?) – pwoolvett