MediaStore无法列出Kotlin手机中的所有视频。为什么?

问题描述 投票:1回答:1

我创建了一个获取视频的功能

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视频'等。我使用自己的应用创建的每个视频都会正确插入,这与默认相机应用创建的视频不同,除非我先打开它们。

android kotlin mediastore
1个回答
0
投票
您可以使用此代码阅读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 ..... } }

© www.soinside.com 2019 - 2024. All rights reserved.