Android Studio Mediastore.Audio.Media.DATA 已弃用,有替代方案吗?

2024-01-19

我正在尝试访问外部存储上的 mp3 文件,并且我正在使用 mediastore 来检索它。然而 android studio 似乎指出通过 mediastore.audio.media.DATA 获取它已被弃用。这是我的代码

        val mediaUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
        val select = MediaStore.Audio.Media.IS_MUSIC + "!=0"

        val rs = contentResolver.query(mediaUri, null, select, null, null)


        if (rs != null) {
            while (rs.moveToNext()) {
                val uri = rs.getString(rs.getColumnIndex(MediaStore.Audio.Media.DATA))
                val author = rs.getString(rs.getColumnIndex(MediaStore.Audio.Media.ARTIST))
                val title = rs.getString(rs.getColumnIndex(MediaStore.Audio.Media.TITLE))
                val albumId = rs.getLong(rs.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ID))

                val uriImage = Uri.Builder()
                uriImage
                    .scheme("content")
                    .authority("media")
                    .appendPath("external")
                    .appendPath("audio")
                    .appendPath("albumart")
                    .appendPath(albumId.toString())


                val music = Music(title, author, uri, uriImage.build())
                listMusic.add(music)


            }
        }

我自己也遇到了同样的问题,奇怪的是很难找出该用什么来代替。如果某些内容被弃用,他们至少应该包含一个关于如何操作的链接。 Spring 框架在这方面非常擅长,所以也许我被宠坏了。

Use MediaStore.Audio.AudioColumns._ID然后你可以构建一个内容 URI,例如:

val mediaId = rs.getString(MediaStore.Audio.AudioColumns._ID)
val uri = Uri.parse(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI.toString() + File.separator + mediaId)

我正在使用它MediaPlayer,所以我使用了如下 URI:

mediaPlayer.setDataSource(context, uri)

希望这可以帮助其他想要了解最新情况并发现您的问题的人。

Source https://github.com/android/uamp/issues/325

还要扩展删除使用Mediastore.Audio.Media.DATA,我发现我仍然可以像我使用的那样进行搜索MediaStore.Audio.Media.DATA,通过搜索MediaStore.Audio.AudioColumns.DISPLAY_NAME。虽然我更喜欢还包括相对路径。

Example:

val c: Cursor? = context.contentResolver.query(
    MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
    null,
    "${MediaStore.Audio.AudioColumns.RELATIVE_PATH} like ? AND ${MediaStore.Audio.AudioColumns.DISPLAY_NAME}=?",
    arrayOf("Audiobooks/%", "some audio book.mp3"),
    null
)

所以之前我在搜索/storage/emulated/0/AudioBook/%,但现在使用相对路径AudioBook/%结合DISPLAY_NAME。所以它不像使用一个字段那么方便,而是使用两个字段。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Studio Mediastore.Audio.Media.DATA 已弃用,有替代方案吗? 的相关文章

随机推荐

  • Gitlab-CI 中的上游触发(又名管道依赖项)

    我似乎无法从这样的工具中找到最明显的 CI 功能 在另一个项目的管道完成后运行项目管道 你可以这样做trigger但仅适用于下游触发 这与您想要的相反 如果您有一个项目是 20 个其他项目的核心依赖项 而这些项目都需要重建 在这种情况下 您
  • 如何在 python 上解决 TISE 的简单边值问题

    我正在尝试求解无限势阱的 TISEV 0在间隔上 0 L 这个练习给我们提供了波函数及其导数的值0 is 0 1分别 这使我们能够使用scipy integrate odeint函数来解决给定能量值的问题 现在的任务是在给定波函数的进一步边
  • “The fi bug” 一个奇怪的 iOS 7 归因文本错误

    我在 iOS 7 中遇到了一个奇怪的错误 我称之为 fi bug 抽象的 两个字符 fi 被视为一个字符 解释 我创建了一个 UILabel 其中包含一个单词 作为属性文本 我创建了一个函数 单击时会将单词的一个字符着色为蓝色 即首先单击它
  • LR(0) 解析器如何离开状态 0?

    我已经阅读了维基百科的解释至少十几次 但我仍然对 LR 0 解析器如何离开状态 0 感到困惑 维基百科的例子及其解释说 http en wikipedia org wiki LR parser Parsing Steps 解析器从仅包含初始
  • 如何在java中找到像2^(10^9)这样的数字的幂[重复]

    这个问题在这里已经有答案了 Math pow 返回一个 double 值并且只接受 int 作为参数 BigInteger 作为没有查找 BigInteger BigInteger 的函数 通过循环来完成它需要很长时间 我还有什么想念的吗
  • toggleClass() 在 Angular 4 中不起作用

    我已经添加jQuery在脚本中并使用 import as from jquery 以及 我还添加了jQuery在 HTML 文件中 But my toggleClass 功能不起作用 当我检查控制台时 没有显示任何错误 它只是空的 下面是我
  • Xamarin 表单:可以在内容页上以编程方式在 Shell 应用程序中添加选项卡

    我通过谷歌查找但找不到结果 我有一个 Shell 设置 Xamarin 表单应用程序 尽管我没有完全使用它的功能 但 xaml 文件中有一个选项卡设置 我想知道我是否可以在 shellContent 下托管一个内容页面并从 contentP
  • 一次使用共享内存的多个实例

    为了在记录程序和显示程序 不能相同 之间传输视频流 我使用共享内存 为了同步访问 我组合了一个类 它包装了一个shared memory object 一个mapped region和一个interprocess sharable mute
  • Javascript“addEventListener”事件在页面加载时触发[重复]

    这个问题在这里已经有答案了 当我运行以下脚本时 该事件始终在页面加载时触发 我不确定我在这里做错了什么 我创建了元素 在 DOM 中找到它 然后附加一个侦听器 但它总是在页面加载时触发事件 而不是在单击元素时触发事件
  • Haskell 中附加词的用例

    我一直在阅读附加语 https en wikipedia org wiki Adjoint functors在过去的几天里 当我开始从理论角度理解它们的重要性时 我想知道人们如何以及为什么在 Haskell 中使用它们 Data Funct
  • Python 在正则表达式中将 f 字符串与 r 字符串和大括号组合

    给定一个单词 x 返回可以在该单词中找到的可能的 n 元语法 您可以根据需要修改n gram值 它位于 pat 变量的花括号中 默认 n 元语法值为 4 例如 对于单词 x x abcdef 可能的 4 克是 abcd bcde cdef
  • 在 AWS Beanstalk 或 EC2 实例中设置 Django 并支持 GeoDjango

    因此 我曾一度使用 Amazon Instance 2013 09 ami 35792c5c 通过 Beanstalk 进行此操作 当时 将此 ebextension 脚本放置在 ebextensions 中的存储库根目录中时效果非常好 0
  • 如何为 JavaScript Set 自定义对象相等性

    新ES 6 Harmony 推出新Set https developer mozilla org en US docs Web JavaScript Reference Global Objects Set目的 Set 使用的恒等算法类似于
  • 有用的替代控制结构?

    有时 当我编程时 我发现某些特定的控制结构对我非常有用 但在我的编程语言中不能直接使用 我认为我最常见的愿望是 短暂的一段时间 我不知道实际上该怎么称呼它 foo split while condition bar 这段代码的语义是foo
  • 将初始化数据传递给 Angular 2

    有谁知道如何将初始化数据传递到使用 Angular CLI 构建的 Angular 2 应用程序中 我需要传递当前从预先验证的 NET 后端获得的访问令牌 以便我可以调用 API 我尝试通过本地 Web api 端点执行此操作 但由于 Ob
  • 如何使用 package.json 脚本复制具有特定文件扩展名的文件

    我正在尝试将 npm 作为构建工具 我遇到的一个障碍是我需要将 javascript 文件从一个文件夹复制到另一个文件夹 源文件夹包含打字稿文件 javascript 文件和地图文件 但在目标文件夹中我只对 javascript 文件感兴趣
  • 如何使用反射调用 Scala 对象方法?

    说 我有以下内容 trait SomeTrait def someMethod String object SomeObject extends SomeTrait def someMethod something 我想使用反射调用 som
  • 初始化列表上的 ArgumentOutOfRangeException

    它在 For 循环中间抛出 ArgumentOutOfRangeException 请注意我删除了 for 循环的其余部分 for int i 0 i lt CurrentUser Course ID Count 1 i CurrentUs
  • 当 mongodb 的好处应该是无模式时,为什么 mongoose 使用模式?

    我是 mongodb 的超级新手 我正在使用 mongoose 从 node js 访问 mongodb 并且知道如何让事情正常工作 但我认为我不明白为什么它会这样工作 最重要的是 我不明白为什么 mongoose 有 模式 而 mongo
  • Android Studio Mediastore.Audio.Media.DATA 已弃用,有替代方案吗?

    我正在尝试访问外部存储上的 mp3 文件 并且我正在使用 mediastore 来检索它 然而 android studio 似乎指出通过 mediastore audio media DATA 获取它已被弃用 这是我的代码 val med