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
Android4.4 ContentResolver查询图片无效 及 图库删除 添加图片后,ContentResolver不更新的问题解决