首页 > 解决方案 > Android ContentResolver 正在从选择中返回具有不同 mime 类型的文件

问题描述

我希望能够使用 MediaPlayer 从 Android 10 Samsung A12 播放 mkv、flac 和 aac 文件。

我已经可以使用带有以下代码的 Android 9 Moto E6 执行此操作。

val projection = arrayOf(
                    MediaStore.Audio.Media._ID, MediaStore.Audio.Media.DISPLAY_NAME,
                    MediaStore.Audio.Media.IS_MUSIC, MediaStore.Audio.Media.ARTIST_ID,
                    MediaStore.Audio.Media.TITLE)
            val selection = MediaStore.Audio.Media.IS_MUSIC + " != ?"
            val selectionArgs = arrayOf("0")
            val sortOrder = MediaStore.Audio.Media.TITLE + " ASC"
            context.contentResolver.query(
                    MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                    projection, selection, selectionArgs, sortOrder).use { ... }

这仅返回Android 10 Samsung A12上的mp3文件,所以我尝试了以下直接获取指定的文件类型。

val contentResolver: ContentResolver = activityMain.contentResolver
        val selection: String = DocumentsContract.Document.COLUMN_MIME_TYPE + " == ?" +
                " OR " + DocumentsContract.Document.COLUMN_MIME_TYPE + " == ?" +
                " OR " + DocumentsContract.Document.COLUMN_MIME_TYPE + " == ?" +
                " OR " + DocumentsContract.Document.COLUMN_MIME_TYPE + " == ?"
        val selectionArgs = arrayOf(
            DocumentsContract.Document.MIME_TYPE_DIR,
            MimeTypeMap.getSingleton().getMimeTypeFromExtension ("mkv"),
            MimeTypeMap.getSingleton().getMimeTypeFromExtension ("flac"),
            MimeTypeMap.getSingleton().getMimeTypeFromExtension ("aac"),
            )
        contentResolver.query(childrenUri, arrayOf<String?>(
                DocumentsContract.Document.COLUMN_DOCUMENT_ID,
                DocumentsContract.Document.COLUMN_MIME_TYPE,
        ),
                selection, selectionArgs, null).use { ... }

此代码仅返回带有音频/mpeg 的 mime 类型。我评估了上述扩展 mkv、flac 和 aac 的 mime 类型,但没有一个指定 mime 类型。

我也试过

val projection = arrayOf(
                    MediaStore.Audio.Media._ID, MediaStore.Audio.Media.DISPLAY_NAME,
                    MediaStore.Audio.Media.ARTIST_ID, MediaStore.Audio.Media.TITLE)
            val selection = MediaStore.Audio.Media.IS_ALARM + " == ?" + " AND " +
                    MediaStore.Audio.Media.IS_NOTIFICATION + "== ?" + "AND " +
                    MediaStore.Audio.Media.IS_RINGTONE + "== ?"
            val selectionArgs = arrayOf("0", "0", "0")
            val sortOrder = MediaStore.Audio.Media.TITLE + " ASC"
            context.contentResolver.query(
                    MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                    projection, selection, selectionArgs, sortOrder).use {

而且只有mp3...

我认为通过文档合同的 mime 类型肯定会起作用,因为它根本不涉及媒体存储,所以我不确定接下来要尝试什么。

标签: androidandroid-contentresolvermediastore

解决方案


推荐阅读