android:contentResolver AddStatuschangelistener在JetPack compose中不工作 我正在尝试在JetPack组成中重写我的旧代码,但是我在contentResolver.addstatuschangelistener方面遇到了麻烦,该代码没有发射同步事件。我正在使用相同的业务逻辑(ViewModel,

问题描述 投票:0回答:1
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) } }

这就是撰写的外观(它与文档中提到的几乎相同的方法:可互操作性apis

):

@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) } } }
它在不同的组合中使用:

SyncStatusManager { Timber.d("sync event should be fired, but it's not") } 我试图使用启动效应,或者根本没有效果,但没有成功。当我触发同步时,回调应立即发射,但事实并非如此。 我想念什么吗?我是JetPack组成的新手。谢谢 (在两种情况下都授予必要的许可)

	

示例:

private fun myLifecycleObserver(onResume:()->Unit,onPause:()->Unit): LifecycleEventObserver =
    LifecycleEventObserver { _, event ->
        when (event) {
            Lifecycle.Event.ON_RESUME -> onResume()
            Lifecycle.Event.ON_PAUSE -> onPause()
            else -> { /* ignore */ }
        }
    }



@Composable
fun SyncStatusManager(
    onSyncEvent: (count: Int) -> Unit
) {
    val context = LocalContext.current
    val lifecycle = LocalLifecycleOwner.current.lifecycle
    val currentOnSyncEvent by rememberUpdatedState(onSyncEvent)
    var syncStatusHandleState by remember { mutableStateOf<Any?>(null) }

    DisposableEffect(context, lifecycle) {
        val lifecycleObserver =myLifecycleObserver(onResume = {
            syncStatusHandleState = ContentResolver.addStatusChangeListener(
                ContentResolver.SYNC_OBSERVER_TYPE_ACTIVE or ContentResolver.SYNC_OBSERVER_TYPE_PENDING
            )
            {
                currentOnSyncEvent(it)
            }
        }, onPause = {
            syncStatusHandleState?.apply {
                ContentResolver.removeStatusChangeListener(this)
            }
        })

        lifecycle.addObserver(lifecycleObserver)
        onDispose {
            lifecycle.removeObserver(lifecycleObserver)
        }
    }
}

android android-jetpack-compose android-contentprovider android-jetpack android-contentresolver
1个回答
1
投票

<uses-permission android:name="android.permission.READ_SYNC_STATS" />

	
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.