微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么某些音频文件无法在具有范围存储的API级别30上访问?

如何解决为什么某些音频文件无法在具有范围存储的API级别30上访问?

我有以下代码提取所有OPUS音频文件,并且它对于除一个目录(即WhatsApp Voice Notes)以外的所有文件都适用。尽管WhatsApp Audio下的音频文件已成功获取。我缺少访问WhatsApp Voice Notes中的文件的任何限制/权限吗?

private  fun readAllOpusFiles() {
    val resolver = this.contentResolver
    val uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
    val projection = arrayOf(MediaStore.Audio.Media._ID,MediaStore.Audio.Media.RELATIVE_PATH,MediaStore.Audio.Media.disPLAY_NAME,MediaStore.Audio.Media.SIZE,MediaStore.Audio.Media.MIME_TYPE,MediaStore.Audio.Media.DATE_MODIFIED)
    val cursor = resolver.query(uri,projection,null,null)
    if (cursor != null && cursor.movetoFirst()) {
        do {
            val id = cursor.getColumnIndex(MediaStore.Audio.Media._ID)
            val name = cursor.getColumnIndex(MediaStore.Audio.Media.disPLAY_NAME)
            var path = cursor.getColumnIndex(MediaStore.Audio.Media.RELATIVE_PATH)
            Log.d("File ID: ",cursor.getString(id))
            Log.d("File Name: ",cursor.getString(name))
            if (cursor.getString(path) != null) {
                Log.d("File Path: ",cursor.getString(path))
            }
        } while (cursor.movetoNext())
    }
}

PS:在Android 10及更低版本上,我可以通过在android:requestLegacyExternalStorage="true"上循环uri来使用清单中及listFiles下的file访问所有文件

val uri = URI.create("file:///storage/emulated/0/WhatsApp/Media/WhatsApp%20Voice%20Notes")
val file = File(uri)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。