我构建了一个开源 Android 应用,根据环境光切换暗模式 – Adaptive Theme

发布: (2026年1月3日 GMT+8 19:56)
3 分钟阅读
原文: Dev.to

Source: Dev.to

Cover image for I built an open-source Android app that switches dark mode based on ambient light – Adaptive Theme

你好,祝新年快乐!

我想分享一个我在业余时间一直在开发的开源项目。

Adaptive Theme

Adaptive Theme 会根据环境光传感器自动在浅色模式和深色模式之间切换——而不是固定的时间表。这样可以提升可读性、眼睛舒适度,甚至可能延长电池续航。它是 免费无广告开源 的。

  • Play Store:
  • GitHub Repo:

电池效率

为了避免因持续轮询传感器而导致的电池消耗,应用完全采用被动方式。它使用事件驱动的架构,在屏幕点亮后立即短暂检查一次光线传感器。没有后台轮询,只会响应系统广播。

注意: 这种事件驱动的方式在 Android 14 及以上版本有效。低版本系统中,接收器无法正确读取传感器。

设置与权限

最大的难点在于应用需要 WRITE_SECURE_SETTINGS 权限来更改系统主题。授予此权限并不简单,因此提供了基于向导的设置流程,包含多种方法:

  • Web 工具(推荐) – 基于浏览器的设置工具,可在另一台设备上使用,无需安装代码或 ADB(WebADB)。访问 。
  • Shizuku – 如果已安装并配置好 Shizuku,可以在 Adaptive Theme 应用内直接授予权限。
  • Root – 在已 root 的设备上,应用内单击一次即可授予权限。
  • 手动 ADB – 若电脑已安装 ADB,可手动运行所需的 ADB 命令。

技术栈与架构

  • UI: 使用 Jetpack Compose 搭配 Material 3 / Material You,外观与系统设置(原生/Pixel)保持一致。
  • 架构: MVVM + 单 Activity 模式。
  • 并发与流: Kotlin Coroutines 与 Flow,实现响应式状态管理。
  • 持久化: Jetpack DataStore,用于类型安全的设置存储。

构建风格

两种不同的构建风格确保核心应用符合 FOSS(自由开源软件)规范:

  • Play Store: 包含 Firebase(专有的崩溃日志等)。
  • FOSS(GitHub Releases 等): 干净的构建,不含任何专有组件或追踪器。

期待听到你的想法和意见!如果发现 bug 或有新功能的点子,请告诉我。我会随时回答问题。

Back to Blog

相关文章

阅读更多 »