[英]Android: Cursor doesn't return all videos saved in app folder in external storage
我目前正在开发视频应用,可以成功将视频保存到应用文件夹中。 但是,当我想在recyclerview中显示应用程序视频时,它不会显示所有视频(在调试应用程序时,光标不会返回所有视频,并且当我重新启动设备时,它返回所有视频,如果必须重新启动设备,则新视频已添加到应用文件夹中,以查看所有视频)
这是源代码。
public static List<MyVideo> getAppVideos(Context context) {
String[] projection = { MediaStore.Video.Media.DATA, MediaStore.Video.Media.DATE_TAKEN, MediaStore.Video.Media.DURATION};
String selection = MediaStore.Images.Media.BUCKET_ID + " = ?";
String[] selectionArgs = { APP_VIDEO_BUCKET_ID };
Cursor cursor = context.getContentResolver().query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
projection,
selection,
selectionArgs,
MediaStore.Files.FileColumns.DATE_ADDED + " DESC");
ArrayList<MyVideo> result = new ArrayList<MyVideo>(cursor.getCount());
if (cursor.moveToFirst()) {
final int dataColumn = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
final int dateColumn = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATE_TAKEN);
final int durationColumn = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATION);
do {
final String data = cursor.getString(dataColumn);
final String createdDate = cursor.getString(dateColumn);
final String durationTime = cursor.getString(durationColumn);
result.add(new MyVideo(data, DateUtils.convertToSeconds(durationTime), "^ " + DateUtils.getDateFromMilliSeconds(Long.parseLong(createdDate), "MMM dd, yyyy")));
} while (cursor.moveToNext());
}
cursor.close();
return result;
}
1.实际上是Android Nature。 当您将一些新文件添加到外部存储时,需要一段时间才能将其添加到Media Content Provider.Androdid System将在特定时期自动运行mediascan。有一种解决方法,您需要触发Android System进行媒体扫描
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(videoAdded)));
2.重新启动设备后,它将扫描媒体并获得所有视频
I have to restart device if new video is added in app folder to see all videos
是。 那是正常行为。 重启后,MediaSotore将为设备上的所有媒体文件建立索引。 如果添加文件,则媒体存储不知道该文件。
因此,您必须告诉媒体存储库(带有几行代码),每次创建新文件时都要索引一个新文件。
Google for mediascanner和新文件作为代码已在此处多次发布。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.