问题描述
我编写了一个代码来观察媒体图像文件夹中的变化。我编写了一个扩展 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)
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 (将#修改为@)