以上答案均不正确,包括标记为正确的答案。
这是实际正确的解决方案:
秘诀是找到您的文件夹所代表的存储桶/专辑。成功完成 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);
我可以使用内置的 Gallery 应用程序验证这是否有效。里程可能因 Google 相册等其他应用程序而异。
我还没有弄清楚如何不过滤图像/视频,即使在图库中您可以选择没有过滤器的特定专辑。
我通过查看画廊应用程序的 AOSP 源来弄清楚这一点。