应用程序使用mvvm和jetpack compose,屏幕(View,compose)使用以下代码显示是否已获得权限:
val context = LocalContext.current
val access by remember { mutableStateOf(
NotificationManagerCompat.getEnabledListenerPackages(context)
.contains(context.packageName)
) }
Text(if (access) "good" else "bad")
之后,使用以下命令打开设置:
context.startActivity(Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"))
更改设置后,屏幕上显示旧值(未更新),但如果您转到另一个屏幕并再次打开此屏幕,显示的值会更新
您的应用程序返回前台后,您可能需要立即刷新可组合项。您当前设置了访问当前首选项的初始值,但变量的值未刷新,因为NotificationManagerCompat不返回Flow或LiveData。
每当应用程序再次进入前台时,您都可以尝试刷新变量。使用
onResume
Activity 生命周期回调来检测这一点。例如,请参阅以下代码:
val lifecycleOwner = LocalLifecycleOwner.current
val lifecycleState by lifecycleOwner.lifecycle.currentStateFlow.collectAsState()
val access by remember { mutableStateOf(
NotificationManagerCompat.getEnabledListenerPackages(context)
.contains(context.packageName)
)
}
LaunchedEffect(lifecycleState) {
if (lifecycleState == Lifecycle.State.RESUMED ) {
access = NotificationManagerCompat.getEnabledListenerPackages(context)
.contains(context.packageName)
)
}