Я пытаюсь получить видеоконтент из 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;
}