致命异常:java.lang.IllegalStateException:未知 URL:content://media/external 是隐藏的 API

问题描述

我编写了一个代码来观察媒体图像文件夹中的变化。我编写了一个扩展 ContentObserver 的 MediaObserver 类。我正在尝试获取 RELATIVE_PATH 和 disPLAY_NAME。但是当 contentResolver 查询运行时,我遇到了异常。我在 API 级别 29 及以上面临的这个问题。并且只有在给定读取存储权限后才会调用寄存器。

Crashlytics 异常如下:

Fatal Exception: java.lang.IllegalStateException: UnkNown URL: content://media/external is hidden API
   at android.os.Parcel.createException(Parcel.java:2096)
   at android.os.Parcel.readException(Parcel.java:2056)
   at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:188)
   at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140)
   at android.content.ContentProviderProxy.query(ContentProviderProxy.java:423)
   at android.content.ContentResolver.query(ContentResolver.java:951)
   at android.content.ContentResolver.query(ContentResolver.java:887)
   at android.content.ContentResolver.query(ContentResolver.java:843)

注册 ContentObserver 的代码

fun register(h: Handler?,context: Context): ContentObserver {
            val contentObserver = MediaObserver(h,context)
            context.getContentResolver().registerContentObserver(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,true,contentObserver)
            return contentObserver
    }

ContentObserver 的 onChange 代码

override fun onChange(selfChange: Boolean,uri: Uri?) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {

        val projection = arrayOf(
            MediaStore.Images.Media.disPLAY_NAME,MediaStore.Images.Media.RELATIVE_PATH
        )

        context.contentResolver.query(
                uri,projection,null,null
        )?.use { cursor ->
               // Some code here
           }

    } else {
        // Some code here
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)