iT邦幫忙

2021 iThome 鐵人賽

DAY 26
0
Mobile Development

如何開發適合電子書閱讀器使用的瀏覽器 Android APP系列 第 26

電子書閱讀器上的瀏覽器 [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)
      }
	...
   }
}

這功能沒有什麼好示範的,就跳過示範囉。


上一篇
電子書閱讀器上的瀏覽器 [Day25] 支援多 Activity
下一篇
電子書閱讀器上的瀏覽器 [Day27] 無痕模式
系列文
如何開發適合電子書閱讀器使用的瀏覽器 Android APP30

尚未有邦友留言

立即登入留言