MediaStore не может перечислить все видео внутри телефона в Kotlin. Почему? - PullRequest
1 голос
/ 24 марта 2020

Я создал функцию для извлечения видео

private val projectionVideo = arrayOf(
MediaStore.Video.Media._ID, //ID
MediaStore.Video.Media.DISPLAY_NAME, //NAME
MediaStore.Video.Media.DATA, //PATH TO CONTENT
MediaStore.Video.Media.DATE_TAKEN, //DATE
MediaStore.Video.Media.DURATION,
MediaStore.Video.Media.SIZE
)

private fun queryVideos(cr: ContentResolver): Cursor? =
        cr.query(
            MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
            projectionVideo, null, null,
            MediaStore.Video.Media.DATE_TAKEN + " $SORT_ORDER"
        )

В Java

public static Uri getContentUri(String volumeName) {
                return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName +
                        "/video/media");
            }
            /**
             * The content:// style URI for the internal storage.
             */
            public static final Uri INTERNAL_CONTENT_URI =
                    getContentUri("internal");
            /**
             * The content:// style URI for the "primary" external storage
             * volume.
             */
            public static final Uri EXTERNAL_CONTENT_URI =
                    getContentUri("external");

Проблема в том, что эта видео не отображается ни в каких путях, например «DCIM» , 'WhatsApp Videos' et c. Каждое видео, которое я создаю с помощью своего собственного приложения, будет правильно вставлено, в отличие от тех, которые созданы приложением камеры по умолчанию, если только я не открою их сначала.

1 Ответ

0 голосов
/ 25 марта 2020

Вы можете читать все видео с Android Shared Storage с этим кодом

    private val videoProjection = arrayOf(
               MediaStore.Video.Media._ID,
               MediaStore.Video.Media.DATA,
               MediaStore.Video.Media.DURATION,
               MediaStore.Video.Media.MIME_TYPE,
               MediaStore.Video.Media.SIZE,
               MediaStore.Video.Media.DATE_ADDED)


    context.contentResolver.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
            videoProjection,
            null,
            null,
            "${MediaStore.Video.Media.DATE_ADDED} DESC"
    )?.use { cursor ->
        while (cursor.moveToNext()) {
           //read video attr from cursor
           cursor.getLong(cursor.getColumnIndexOrThrow(videoProjection[0])) // read video id 
           cursor.getString(cursor.getColumnIndexOrThrow(videoProjection[1])) // read video path 
           // and .....
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...