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

Android 13权限变更后,如何修改媒体文件元数据?

API 33 下无法使用 TagLib 修改音乐文件元数据的解决方案

问题背景

升级到 Android API 33 后,原有用 TagLib 修改音乐文件元数据的代码因权限问题失效。已在清单中添加以下读取权限:

<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />

但这些仅为读取权限,目前找不到适配的外部存储写入权限,导致核心功能(修改音乐元数据)无法正常运行。

可行解决方案

  • 通过 MediaStore API 修改元数据
    API 33 及更高版本,官方推荐用 MediaStore 而非直接操作文件路径来修改媒体元数据。你可以通过 ContentResolver 更新音乐的指定字段,示例代码:

    val contentValues = ContentValues().apply {
        put(MediaStore.Audio.Media.TITLE, "新标题")
        put(MediaStore.Audio.Media.ARTIST, "新艺术家")
        // 按需添加专辑、流派等其他元数据字段
    }
    val uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
    val selection = "${MediaStore.Audio.Media._ID} = ?"
    val selectionArgs = arrayOf(targetSongId.toString())
    contentResolver.update(uri, contentValues, selection, selectionArgs)
    

    这种方式无需额外写入权限,只要能获取到目标音乐的 ID 和对应 URI 即可操作。

  • 将音乐文件存储到应用专属目录
    如果音乐文件是应用自身下载或生成的,可将文件保存在应用专属外部存储目录(getExternalFilesDir(Environment.DIRECTORY_MUSIC)),此目录下的文件读写无需任何权限,可直接用 TagLib 修改元数据。

  • 申请 MANAGE_EXTERNAL_STORAGE 权限(仅限必要场景)
    若必须修改任意外部存储的音乐文件,可申请全存储访问权限,但该权限需用户手动在系统设置中开启,且谷歌审核严格,仅适用于文件管理器类刚需应用。
    清单中添加权限:

    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
        tools:ignore="ScopedStorage" />
    

    代码中引导用户开启权限:

    if (!Environment.isExternalStorageManager()) {
        val intent = Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION)
        startActivity(intent)
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 16:22:41