正しいとマークされたものを含め、上記の答えはどれも正しくありません。
実際の正しい解決策は次のとおりです。
秘密は、フォルダが表されているバケット/アルバムを見つけることです。バケットは MediaScan が成功した後に表示されるため、表示したい画像/ビデオが最初に上記のように複数回スキャンされていることを確認してください。
/sdcard/myapp/ myappsmediafolderにインデックス付きフォルダーがあるとします。
String bucketId = "";
final String[] projection = new String[] {"DISTINCT " + MediaStore.Images.Media.BUCKET_DISPLAY_NAME + ", " + MediaStore.Images.Media.BUCKET_ID};
final Cursor cur = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null, null, null);
while (cur != null && cur.moveToNext()) {
final String bucketName = cur.getString((cur.getColumnIndex(MediaStore.Images.ImageColumns.BUCKET_DISPLAY_NAME)));
if (bucketName.equals("myappsmediafolder")) {
bucketId = cur.getString((cur.getColumnIndex(MediaStore.Images.ImageColumns.BUCKET_ID)));
break;
}
}
アルバムのbucketIdを取得したので、単純なインテントで開くことができます。
フィルタ ビデオ ファイル:
Uri mediaUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
フィルタ イメージ ファイル:
Uri mediaUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
...
if (bucketId.length() > 0) {
mediaUri = mediaUri.buildUpon()
.authority("media")
.appendQueryParameter("bucketId", bucketId)
.build();
}
Intent intent = new Intent(Intent.ACTION_VIEW, mediaUri);
startActivity(intent);
これが組み込みのギャラリー アプリで動作することを確認できます。マイレージは、Google フォトなどの他のアプリによって異なる場合があります。
ギャラリー内でフィルターなしで特定のアルバムを選択できますが、画像/ビデオをフィルター処理しない方法をまだ理解していません。
ギャラリー アプリの AOSP ソースを見て、これを理解しました。