Курсор возвращает 0 при извлечении видеоконтента из MediaStore в Android

Я пытаюсь получить видеоконтент из MediaStore.Video в Android 11. Курсор возвращает 0 с кодом ниже. Я добавил разрешение READ_EXTERNAL_STORAGE в файл манифеста, а также добавил проверку разрешений во время выполнения перед доступом к приведенному ниже коду. Можете ли вы помочь мне, как получить поля имени, продолжительности, размера из всех видео в поставщике MediaStore.Video в Android 11.

    private List<MediaData> getMediaContent() {
    List<MediaData> mediaList = new ArrayList<MediaData>();
    String[] PROJECTION = new String[]{
            MediaStore.Video.Media._ID,
            MediaStore.Video.Media.DISPLAY_NAME,
            MediaStore.Video.Media.DURATION,
            MediaStore.Video.Media.SIZE
    };

    String selection = MediaStore.Video.Media.DURATION + ">= ?";

    String[] selectionArgs = new String[]{
            String.valueOf(TimeUnit.MILLISECONDS.convert(5, TimeUnit.HOURS))};
    String sortOrder = MediaStore.Video.Media.DISPLAY_NAME + " ASC";

    try {
        Cursor cursor = getContentResolver().query(MediaStore.Video.Media.INTERNAL_CONTENT_URI, PROJECTION, selection, selectionArgs, sortOrder);
        while (cursor.moveToNext()) {
            long id = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Video.Media._ID));
            String name = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DISPLAY_NAME));
            int duration = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATION));
            int size = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE));

            Uri uri = ContentUris.withAppendedId(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, id);
            mediaList.add(new MediaData(uri, name, duration, size));
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

    return mediaList;
}

person chait    schedule 05.11.2020    source источник


Ответы (1)


Пусть это поможет вам:

private final Uri uri = MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI;

public Cursor getandroidPlaylistcursor(Context context) {
    ContentResolver resolver = context.getContentResolver();
    final String id = MediaStore.Audio.Playlists._ID;
    final String name = MediaStore.Audio.Playlists.NAME;
    final String[] columns = { id, name };
    return  resolver.query(uri, columns, null, null,name + " ASC");
}

Но если вы используете Mefiaplayer:

MediaPlayer mp = MediaPlayer.create(this, Uri.parse(uriOfYourFile));
 int duration = mp.getDuration();
etc(...)
person El.MENSI    schedule 07.11.2020