iOS 16:已实现SetFocusFilterIntent,如何在主应用内检测专注状态?
应用内查询当前专注状态
在Android 12(API 31)及以上版本,可通过FocusManager API直接查询当前激活的专注状态:
- 获取
FocusManager实例:
val focusManager = getSystemService(FocusManager::class.java)
- 获取当前激活的专注过滤器列表,判断是否存在目标模式:
val activeFilters = focusManager.activeFocusFilters if (activeFilters.contains(FocusFilter.WORK)) { // 工作专注模式已激活 } else if (activeFilters.contains(FocusFilter.PERSONAL)) { // 个人专注模式已激活 }
若需兼容更低版本,可通过AppOpsManager判断是否有专注过滤器生效(无法区分具体模式):
val appOpsManager = getSystemService(AppOpsManager::class.java) val mode = appOpsManager.checkOpNoThrow(AppOpsManager.OPSTR_FOCUS_FILTER, android.os.Process.myUid(), packageName) if (mode == AppOpsManager.MODE_ALLOWED) { // 存在激活的专注过滤器 }
主应用检测专注模式(已实现SetFocusFilterIntent)
主应用可通过两种方式检测专注模式状态:
- 实时查询:直接调用上述
FocusManager的activeFocusFilters方法,在页面启动、定时任务等时机主动获取当前状态。 - 监听状态变化:注册
ACTION_FOCUS_FILTER_CHANGED广播接收器,接收专注模式切换通知:
val receiver = object : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { if (Intent.ACTION_FOCUS_FILTER_CHANGED == intent?.action) { // 专注模式状态变更,重新查询并处理逻辑 val focusManager = context?.getSystemService(FocusManager::class.java) val activeFilters = focusManager?.activeFocusFilters } } } // 动态注册接收器(需在合适时机如页面销毁时注销) registerReceiver(receiver, IntentFilter(Intent.ACTION_FOCUS_FILTER_CHANGED))
内容的提问来源于stack exchange,提问作者Divagar.G
相关产品推荐
相关产品推荐

