You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 19:36:17