【问题标题】:ContentResolver insert MediaStore.Audio.Media.EXTERNAL_CONTENT_URI errorContentResolver 插入 MediaStore.Audio.Media.EXTERNAL_CONTENT_URI 错误
【发布时间】: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


【解决方案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}")
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多