我正在尝试从设备的外部存储(例如/storage/emulated/0/Music
文件夹中)中删除音频文件。在分析了MediaStore
示例之后,我最终得到了 API 28 及更早版本的以下解决方案:
fun deleteTracks(trackIds: LongArray): Int {
val whereClause = buildWildcardInClause(trackIds.size) // _id IN (?, ?, ?, ...)
return resolver.delete(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, whereClause, Array(trackIds.size) { trackIds[it].toString() })
}
我注意到上面的代码只从 MediaStore 数据库中删除了曲目,但没有从设备中删除(文件在重新启动后重新添加到 MediaStore)。因此,我修改了该代码以查询该Media.DATA
列,然后使用该信息删除相关文件。这按预期工作。
但是现在 Android Q 引入了 Scoped Storage,Media.DATA
(和Albums.ALBUM_ART
)现在已被弃用,因为应用程序可能无法访问这些文件。ContentResolver.openFileDescriptor
只能用来读取文件,不能删除。
那么从 Android Q 开始删除曲目的推荐方法是什么?该示例没有显示如何从 中删除多个文件MediaStore
,并且MediaStore.Audio.Media
似乎与MediaStore.Images.Media
.