Я пытаюсь переписать свой старый код в JetPack Compose, но у меня проблемы с ContentResolver.AddStatusChangelistener, который не запускает события синхронизации. Я использую одну и ту же бизнес -логику (ViewModel, Repository) как для - классический пользовательский интерфейс, так и для Compose, но в Compose она не работает.
Вот классический код пользовательского интерфейса:
private var syncStatusHandle: Any? = null
override fun onResume() {
super.onResume()
syncStatusHandle = ContentResolver.addStatusChangeListener(
ContentResolver.SYNC_OBSERVER_TYPE_ACTIVE or ContentResolver.SYNC_OBSERVER_TYPE_PENDING
)
{
Timber.d("sync event fired")
}
}
override fun onPause() {
super.onPause()
if (syncStatusHandle != null) {
ContentResolver.removeStatusChangeListener(syncStatusHandle)
}
}
< /code>
И вот как это выглядит в Compose (это почти тот же подход, который упоминался в API -интерфейсах Docs: Feelsectionability): < /p>
@Composable
fun SyncStatusManager(
onSyncEvent: (count: Int) -> Unit
) {
val context = LocalContext.current
val currentOnSyncEvent by rememberUpdatedState(onSyncEvent)
DisposableEffect(context) {
val syncStatusHandle = ContentResolver.addStatusChangeListener(
ContentResolver.SYNC_OBSERVER_TYPE_ACTIVE or ContentResolver.SYNC_OBSERVER_TYPE_PENDING
)
{
currentOnSyncEvent(it)
}
onDispose {
ContentResolver.removeStatusChangeListener(syncStatusHandle)
}
}
}
< /code>
И он используется в разных композитных, как это: < /p>
SyncStatusManager {
Timber.d("sync event should be fired, but it's not")
}
< /code>
Я попытался использовать запуск Effect, или нет вообще не эффекты, но без успеха. Когда я запускаю синхронизацию, обратный вызов должен немедленно стрелять, но это не так.
Я что -то упускаю? Я новичок в JetPack Compose. Спасибо
(необходимые разрешения предоставляются в обоих случаях) < /p>
Подробнее здесь: https://stackoverflow.com/questions/753 ... ck-compose