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

如何以编程方式读取设备dark mode schedule,预判未来指定时间深色模式状态

深色模式调度规则读取与预判方案

核心结论

目前主流移动操作系统没有全局通用的公开API可以直接读取用户设置的深色模式定时调度规则,需要根据你的应用运行平台做对应适配,或用替代方案实现需求。

分平台实现方案

iOS

苹果出于用户隐私考虑,未公开深色模式调度规则的读取接口,无法直接拿到用户设置的日落/日出时间或自定义定时时间段。
可选实现路径:

  • 若你的通知是客户端本地调度:可以使用iOS 10+提供的Notification Service Extension,在通知即将弹出的瞬间系统会唤醒扩展进程,此时直接读取UITraitCollection.current.userInterfaceStyle获取当前深色模式状态,实时替换通知的图片附件即可,不需要提前预判未来状态
  • 若必须提前预判:可以在本地监听UITraitCollection.userInterfaceStyleDidChange系统通知,记录每次深色模式切换的时间点,累计3-7天的切换数据后即可拟合出用户的深色模式调度规律,实现未来时间点的状态预判

Android

Android 12及以上提供了公开API可以直接读取深色模式调度规则,无需申请特殊权限:

  • 读取调度类型:通过UiModeManager.getNightMode()返回值判断当前深色模式是永久开启、永久关闭、定时开启还是日落至日出自动开启
  • 读取自定义定时时间:通过UiModeManager.getCustomNightModeStart()和UiModeManager.getCustomNightModeEnd()可以拿到用户设置的自定义深色模式起止时间
  • 监听调度变更:注册UiModeManager.ACTION_NIGHT_MODE_CHANGED广播,即可收到用户修改深色模式调度规则的通知,实时更新你本地存储的调度规则
    如果需要适配Android 12以下版本,和iOS的逻辑一致,通过监听Intent.ACTION_CONFIGURATION_CHANGED广播记录主题切换时间,拟合调度规律即可。

通用替代方案

如果不想做分平台适配,可以直接用以下方案规避调度读取需求:

  • 预生成深浅两种主题的通知图片,推送通知时同时携带两个图片的标识/地址,客户端收到通知时读取当前系统主题,选择对应图片加载即可
  • 如果必须由服务端确定图片内容,可以在客户端每次启动、系统主题切换、调度规则变更时,将本地获取到的调度规则同步到服务端,服务端即可根据同步的规则预判任意时间点的深色模式状态,若用户开启的是日落日出模式,需要同步用户当前的地理位置用于计算对应日期的日落日出时间

内容的提问来源于stack exchange,提问作者Ben Lu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:54:04