繁体   English   中英

Android:Cursor不会返回保存在外部存储中应用文件夹中的所有视频

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM