You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MediaStore查询EXTERNAL_CONTENT_URI无结果问题求助

问题:MediaStore查询EXTERNAL_CONTENT_URI无结果返回

开发一款具备音频文件搜索与播放功能的App时,遇到MediaStore.Audio.Media.EXTERNAL_CONTENT_URI查询无结果返回的问题,相关信息如下:

查询代码

fun search(query: String): MutableList<Track> {

        val outputTracks = mutableListOf<Track>()

        val projection = arrayOf(
            MediaStore.Audio.Media._ID,            // 音频文件ID
            MediaStore.Audio.Media.DISPLAY_NAME,   // 音频文件名
            MediaStore.Audio.Media.TITLE,
            MediaStore.Audio.Media.ARTIST,
            MediaStore.Audio.Media.DURATION,
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                MediaStore.Audio.Media.RELATIVE_PATH
            } else {
                MediaStore.Audio.Media.DATA
            }
        )

        val selection = "(${MediaStore.Audio.Media.DISPLAY_NAME} LIKE ? OR ${MediaStore.Audio.Media.TITLE} LIKE ?)"
        val selectionArgs = arrayOf("%${query}", "%${query}")

        try {
            context.contentResolver.query(
                MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                projection,
                selection,
                selectionArgs,
                null
            )?.use { cursor ->
                Log.i("FILETEST", "yaya2")
                if (cursor.count == 0) {
                    Log.i("FILETEST", "empty")
                } else {
                    Log.i("FILETEST", "not empty")
                }
                while (cursor.moveToNext()) {
                    Log.i(
                        "FILETEST",
                        cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME))
                    )

                    outputTracks.add(cursorToTrackClass(cursor))

                }
            }
        } catch (e: IllegalArgumentException) {
            Log.e("FILETEST", "Query failed: ", e)
        }

        return outputTracks
}

权限配置

AndroidManifest.xml中已配置对应权限:

<uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/>
<uses-permission
    android:name="android.permission.READ_EXTERNAL_STORAGE"
    android:maxSdkVersion="32"/>

测试情况

  • 在API 35虚拟机和实体机上测试均无结果
  • 虚拟机通过Device Explorer将.mp3文件添加到Downloads和Music文件夹并同步后,Logcat始终打印empty
  • 即使将查询的selection和selectionArgs设为null,依然无法获取结果

补充信息

  • 使用INTERNAL_CONTENT_URI可以正常获取系统示例音频,但EXTERNAL_CONTENT_URI始终无结果
  • 已完成动态权限申请,系统显示权限已授予,权限申请代码如下:
val requestPermissionLauncher =
    registerForActivityResult(ActivityResultContracts.RequestPermission())
    { isGranted: Boolean ->
        if (!isGranted) {
            // 权限未授予处理逻辑
        }
    }
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
    if (ContextCompat.checkSelfPermission(this,
            Manifest.permission.READ_MEDIA_AUDIO) != PackageManager.PERMISSION_GRANTED) {
            requestPermissionLauncher.launch(Manifest.permission.READ_MEDIA_AUDIO)
    }
}
else {
    if (ContextCompat.checkSelfPermission(this,
            Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        requestPermissionLauncher.launch(Manifest.permission.READ_EXTERNAL_STORAGE)
    }
}

内容的提问来源于stack exchange,提问作者jules

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 16:13:10