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
相关产品推荐
相关产品推荐

