以上答案都不正确,包括标记为正确的答案。
这是实际的正确解决方案:
秘密在于找到代表您文件夹的存储桶/相册。 存储桶出现在成功的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源代码中的相册应用程序来解决这个问题的。