在Jetpack Compose中,没有与ContentResolver addStatusChangeListener一起使用的正确方式。但是,您可以使用基于LiveData的解决方案来实现此目的。
首先,创建LiveData对象以侦听所需内容URI的更改:
class MyLiveData(context: Context, uri: Uri) : LiveData() {
private val contentResolver = context.contentResolver
override fun onActive() {
super.onActive()
val listener = object : ContentObserver(Handler()) {
override fun onChange(selfChange: Boolean, uri: Uri?) {
postValue(Unit)
}
}
contentResolver.registerContentObserver(uri, true, listener)
}
override fun onInactive() {
super.onInactive()
contentResolver.unregisterContentObserver(listener)
}
}
然后,您可以使用LiveData的observeForever()方法添加观察者,如下所示:
val myLiveData = MyLiveData(context, uri)
myLiveData.observeForever {
// Do something when the content changes
}
请注意,observeForever()是一种阻塞调用,因此请不要在主线程上使用它。
现在,您已经创建了一个类似于addStatusChangeListener()的解决方案,在更改时通知您。
更多细节,请参阅以下链接: https://stackoverflow.com/questions/61353517/android-contentresolver-addstatuschangelistener-not-working-in-jetpack-compose