Я пытаюсь переписать свой старый код в 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
Android: ContentResolver AddStatusChangelistener не работает в JetPack Compose ⇐ Android
Форум для тех, кто программирует под Android
1739773970
Anonymous
Я пытаюсь переписать свой старый код в 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>
Подробнее здесь: [url]https://stackoverflow.com/questions/75325986/android-contentresolver-addstatuschangelistener-not-working-in-jetpack-compose[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия