【发布时间】: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
标签: android android-contentresolver