Android屏幕亮度屁擅、待機時間總結(jié)

程序員成長筆記


屏幕亮度部分

//設(shè)置屏幕亮度
 private fun changeAppBrightness(context: Activity) {
        val window = context.window
        val lp = window.attributes
        if (isAutomatic) {//是否跟隨系統(tǒng)
            lp.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE
        } else {
            lp.screenBrightness = (if (screenLightValue <= 0) 1 else screenLightValue) / 255f
        }
        window.attributes = lp
    }

    val screenLightValue: Int//獲取屏幕亮度偿凭,例子中使用srp保存亮度值
        get() = SRPreferences.instance.getInt(SRPreferences.READ_LIGHT_VOLUE, 122)

    fun setScreenLightValue(activity: Activity, value: Int) {//設(shè)置亮度值,并改變屏幕亮度
        SRPreferences.instance.setInt(SRPreferences.READ_LIGHT_VOLUE, value)
        changeAppBrightness(activity)
    }

    private val screenLightMode: Int//獲取屏幕亮度模式派歌,跟隨系統(tǒng)or手動控制
        get() = SRPreferences.instance.getInt(SRPreferences.READ_LIGHT_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC)

    fun setScreenLightMode(activity: Activity, screenLightMode: Int) {//設(shè)置亮度模式弯囊,并改變屏幕亮度
        SRPreferences.instance.setInt(SRPreferences.READ_LIGHT_MODE, screenLightMode)
        changeAppBrightness(activity)
    }

    val isAutomatic: Boolean//是否跟隨系統(tǒng)
        get() = screenLightMode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC

以上代碼簡單封裝常用的屏幕亮度控制,提供簡單的頁面亮度模式切換和頁面亮度改變胶果。使用srp做部分的數(shù)據(jù)持久化,以便做為軟件的持久設(shè)置匾嘱,如不需要,可更改為靜態(tài)變量早抠。


屏幕待機時間部分

fun syster(reset: Boolean) {//記錄系統(tǒng)待機時間或還原
        try {
            if (reset) {
                Settings.System.putInt(App.app!!.contentResolver, Settings.System.SCREEN_OFF_TIMEOUT,
                        SRPreferences.instance.getInt(SRPreferences.READ_LIGHT_TIME_SYSTER, 10*60*1000))
            } else {
                SRPreferences.instance.setInt(SRPreferences.READ_LIGHT_TIME_SYSTER,
                        Settings.System.getInt(App.app!!.contentResolver, Settings.System.SCREEN_OFF_TIMEOUT))
            }
        } catch (e: Exception) {
            e.printStackTrace()
        }

    }

    fun setWindowLightTime(activity: Activity, value: Int) {//設(shè)置屏幕待機時間
        SRPreferences.instance.setInt(SRPreferences.READ_LIGHT_TIME, value)
        activity.window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
        when (value) {
            0 -> syster(true)
            5 -> Settings.System.putInt(App.app!!.contentResolver, Settings.System.SCREEN_OFF_TIMEOUT, 15 * 1000)
            10 -> Settings.System.putInt(App.app!!.contentResolver, Settings.System.SCREEN_OFF_TIMEOUT, 30 * 1000)
            -1 -> activity.window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
        }
    }

這部分主要有兩個方法:

  1. 第一個方法主要是記錄系統(tǒng)待機時間霎烙,以及還原系統(tǒng)待機時間。當(dāng)參數(shù)為true時,是還原系統(tǒng)時間蕊连,前提是已經(jīng)記錄過系統(tǒng)時間吼过,否則會設(shè)置為默認(rèn)時間10分鐘。
  2. 第二個方法主要是設(shè)置待機時間咪奖,可選項以及時間可以自己定制,現(xiàn)在的方法中主要有4個case,當(dāng)值為0的時候即設(shè)置為系統(tǒng)時間酱床,值為-1的時候會設(shè)置為常亮羊赵,值為5和10的時候回分別設(shè)置為不同的待機時間。
  3. 同樣的使用srp做一些數(shù)據(jù)的持久化處理扇谣。
  4. 使用的時候一般會在進(jìn)入程序時記錄一下系統(tǒng)時間值昧捷,然后讀取上次記錄的用戶選擇值,并做設(shè)置罐寨;在退出程序的時候還原為系統(tǒng)時間值靡挥。

最后記錄一個自己用的倒計時的工具類:

abstract class Timer {
    private var mMillisInFuture: Long = 0
    private val mCountdownInterval: Long = 1000
    private var mStopTimeInFuture: Long = 0
    private val mPauseTimeInFuture: Long = 0
    private var isStop = false
    private var isPause = false

    fun setMillisInFuture(millisInFuture: Long): TTSTimer {
        stop()
        mMillisInFuture = millisInFuture
        return this
    }

    @Synchronized private fun start(millisInFuture: Long): TTSTimer {
        isStop = false
        if (millisInFuture <= 0) {
            onFinish()
            return this
        }
        mStopTimeInFuture = SystemClock.elapsedRealtime() + millisInFuture
        mHandler.sendMessage(mHandler.obtainMessage(MSG))
        return this
    }

    /**
     * 開始倒計時
     */
    @Synchronized fun start() {
        start(mMillisInFuture)
    }

    /**
     * 停止倒計時
     */
    @Synchronized fun stop() {
        isStop = true
        mHandler.removeMessages(MSG)
    }

    /**
     * 重新開始
     */
    @Synchronized fun restart() {
        if (isStop || !isPause)
            return
        isPause = false
        start(mPauseTimeInFuture)
    }

    /**
     * 倒計時間隔回調(diào)
     * @param millisUntilFinished 剩余毫秒數(shù)
     */
    abstract fun onTick(millisUntilFinished: Long)

    /**
     * 倒計時結(jié)束回調(diào)
     */
    abstract fun onFinish()

    private val mHandler = object : Handler() {
        override fun handleMessage(msg: Message) {
            synchronized(this@Timer) {
                if (isStop || isPause) {
                    return
                }
                val millisLeft = mStopTimeInFuture - SystemClock.elapsedRealtime()
                if (millisLeft <= 0) {
                    onFinish()
                } else {
                    val lastTickStart = SystemClock.elapsedRealtime()
                    onTick(millisLeft)
                    var delay = lastTickStart + mCountdownInterval - SystemClock.elapsedRealtime()
                    while (delay < 0)
                        delay += mCountdownInterval
                    sendMessageDelayed(obtainMessage(MSG), delay)
                }
            }
        }
    }
    companion object {
        private val MSG = 1
    }
}

只是一個抽象類,具體使用:

var mTimer: Timer = object : Timer() {
        override fun onTick(millisUntilFinished: Long) {
            //倒計時回調(diào)
        }

        override fun onFinish() {
            //結(jié)束回調(diào)
        }
    }

mTimer.setMillisInFuture((30 * 60 * 1000).toLong()).start()

代碼地址


更新:修改屏幕休眠時間的方法有bug,在高版本手機獲取修改系統(tǒng)設(shè)置的權(quán)限并不太容易鸯绿,所以在另一篇文章中介紹了使用powermanager修改屏幕休眠時間的方式跋破,可以參考一下簸淀。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市毒返,隨后出現(xiàn)的幾起案子租幕,更是在濱河造成了極大的恐慌,老刑警劉巖拧簸,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劲绪,死亡現(xiàn)場離奇詭異,居然都是意外死亡盆赤,警方通過查閱死者的電腦和手機贾富,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來牺六,“玉大人颤枪,你說我怎么就攤上這事⊥闷颍” “怎么了汇鞭?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長庸追。 經(jīng)常有香客問我霍骄,道長,這世上最難降的妖魔是什么淡溯? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任读整,我火速辦了婚禮,結(jié)果婚禮上咱娶,老公的妹妹穿的比我還像新娘米间。我一直安慰自己,他們只是感情好膘侮,可當(dāng)我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布屈糊。 她就那樣靜靜地躺著,像睡著了一般琼了。 火紅的嫁衣襯著肌膚如雪逻锐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天雕薪,我揣著相機與錄音昧诱,去河邊找鬼。 笑死所袁,一個胖子當(dāng)著我的面吹牛盏档,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播燥爷,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蜈亩,長吁一口氣:“原來是場噩夢啊……” “哼懦窘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起勺拣,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤奶赠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后药有,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體毅戈,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年愤惰,在試婚紗的時候發(fā)現(xiàn)自己被綠了苇经。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡宦言,死狀恐怖扇单,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情奠旺,我是刑警寧澤蜘澜,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站响疚,受9級特大地震影響鄙信,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜忿晕,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一装诡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧践盼,春花似錦鸦采、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至肄程,卻和暖如春锣吼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背绷耍。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鲜侥,地道東北人褂始。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像描函,于是被迫代替她去往敵國和親崎苗。 傳聞我的和親對象是個殘疾皇子狐粱,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,139評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件胆数、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,103評論 4 62
  • 看到那個小仙女的照片肌蜻,第一感覺好卡哇伊,好美膩哦必尼,太適合畫卡通漫畫了蒋搜。于是乎,繪畫小白便畫了這漫畫美女判莉,希望小仙女...
    尹伊兒閱讀 579評論 5 21
  • 這次月考成績早豆挽, 我兒又把喜來報。 全校排到十五名券盅, 穩(wěn)中有升也挺好帮哈。 稍微有點小遺憾, 分?jǐn)?shù)還應(yīng)再提高锰镀。 臉上一...
    石三英語閱讀 94評論 0 0
  • 去做回自己吧 娘侍,不要在意,你為他人的付出已經(jīng)足夠泳炉,需要去為自己好好考慮了憾筏。 去做回自己,敢愛敢恨胡桃,...
    稻草人LOVE閱讀 216評論 0 1