ContentResolver 插入 MediaStore.Audio.Media.EXTERNAL_CONTENT_URI 错误

Posted

技术标签:

【中文标题】ContentResolver 插入 MediaStore.Audio.Media.EXTERNAL_CONTENT_URI 错误【英文标题】:ContentResolver insert MediaStore.Audio.Media.EXTERNAL_CONTENT_URI error 【发布时间】:2020-01-20 03:10:06 【问题描述】:

我想通过 contentResolver 获取 uri 插入音乐。

val contentValues = ContentValues()
contentValues.put(MediaStore.Audio.Media.DISPLAY_NAME, music.displayName)
contentResolver.insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, contentValues)

如果没有设置MediaStore.Audio.Media.DATA,一定是错误的。

如果使用相同的方法插入到 MediaStore.Images.Media.EXTERNAL_CONTENT_URI 或 MediaStore.Video.Media.EXTERNAL_CONTENT_URI 是成功的。

我只想在 android Q 上获取写入数据的 uri。

java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.lastIndexOf(int)' on a null object reference
   at android.os.Parcel.createException(Parcel.java:1959)
   at android.os.Parcel.readException(Parcel.java:1921)
   at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183)
   at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
   at android.content.ContentProviderProxy.insert(ContentProviderNative.java:476)
   at android.content.ContentResolver.insert(ContentResolver.java:1603)

【问题讨论】:

很可能您需要在ContentValues 中填写AudioColumns - 现在您将它们留空 我尝试添加所有没有 DATA 的列然后仍然有同样的问题。 好吧,你为什么要打电话给insert()?你不能用MediaScannerConnection吗? 因为我准备将stream保存到Music Dir并且习惯了openFileDescriptor,但是得到FileDescriptor需要一个uri,所以我想从mediaStore获取uri。在 Android Q 上,不要通过File() 保存文件。 如果您需要Uri,请使用FileProvider,但老实说,我仍然不知道为什么您不能使用MediaScannerConnection - 它会在OnScanCompletedListener 中为您提供Uri 【参考方案1】:

对于 android Q 及更新版本,您应该设置 MediaStore.Audio.Media.RELATIVE_PATH 而不是 MediaStore.Audio.Media.DATA

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) 
    contentValues.put(MediaStore.Audio.Media.RELATIVE_PATH, "$Environment.DIRECTORY_MUSIC")

【讨论】:

以上是关于ContentResolver 插入 MediaStore.Audio.Media.EXTERNAL_CONTENT_URI 错误的主要内容,如果未能解决你的问题,请参考以下文章

zabbix专题:第六章 动作Actions告警方式Medias

插入媒体文件时应用程序在 Android 9 上崩溃

ContentResolver(一)

android ContentResolver详解

Android4.4 ContentResolver查询图片无效 及 图库删除 添加图片后,ContentResolver不更新的问题解决

Android开发实践 ContentProvider和ContentResolver