电子书阅读器上的浏览器 [Day26] 保持画面不会自动关闭

今天的内容很短,因为实作还蛮容易的。

浏览网页时,有些时候是在看影片。这时,如果没有特别设定要系统保持清醒的话,常常会看到一半就因为系统睡眠时间到了,就把画面关掉。如果常常会利用 browser 来看影片的话,最好有个开关让系统在使用 browser app 时能够不要受到系统的睡眠时间设定影响。

在 browser 中的设定画面已经利用 Android 的 Preference UI 设计得很完善了,所以我只要在特定的 preference xml 中加入新的 checkbox preference,然後再在程序中侦测当这个设定改变时,把 keep awake 的状态打开来就行了。

实作

修改 preference_ui.xml,加入 sp_screen_awake。

<CheckBoxPreference
  android:defaultValue="false"
  android:icon="@drawable/ic_eye"
  android:key="sp_screen_awake"
  android:title="@string/setting_title_screen_awake"
  android:summary="@string/setting_summary_screen_awake" />

在 ConfigManager 中新增 preference key

var keepAwake: Boolean
  get() = sp.getBoolean(K_KEEP_AWAKE, false)
  set(value) {sp.edit { putBoolean(K_KEEP_AWAKE, value) } }

在 BrowserActivity 初始化时,设定 keep awake 相关 flag

override fun onCreate(savedInstanceState: Bundle?) {
  ...
  if (config.keepAwake) {
    window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
  }

侦测 shared preference 的改变,并调整 flag 状态

private val preferenceChangeListener = SharedPreferences.OnSharedPreferenceChangeListener { _, key ->
  when {
    key.equals(ConfigManager.K_KEEP_AWAKE) -> {
      if (config.keepAwake) {
        window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
      } else {
        window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
      }
	...
   }
}

这功能没有什麽好示范的,就跳过示范罗。


<<:  [Day 11] - 准备串接永丰汇率API!

>>:  Day 21 资料宝石:【Lab】RDS架构 建立自己的第一台云端资料库 (上)

【这些年我似是非懂的 Javascript】那些年我睡掉的物件导向 #浅谈 #Part 1

嗨~各位好久不见, 最近几乎都在写一些自己喜欢的专案, 不知不觉已经两周了呢 (欢乐的时光总是过得...

Re: 新手让网页 act 起来: Day25 - useMemo 和 useCallback

前言 在前面几天介绍了使用了 useCallback 或 useMemo 来做效能优化,不知道会不会...

Extra08 - Cypress - E2E 测试框架

此篇为番外,为选入本篇的原因为 Cypress 的功能与 End to End 测试的方式多元且复...

Day4|【Git】用户名称与信箱- Git的初始设定与 config

💡 开始使用 Git 之前,我们需要先设定使用者名称及电子邮件地址。 为什麽需要设定用户名称及 E-...

Day 6: LeetCode 54. Spiral Matrix

Tag:随意刷-[50-100] LeetCode Problem Source: 54. Spir...