Android亮度調(diào)節(jié)關(guān)鍵API與技巧,實(shí)現(xiàn)APP亮度個(gè)性化設(shè)置
Android系統(tǒng)亮度調(diào)節(jié)
Android系統(tǒng)亮度調(diào)節(jié)全局性最高,常見于系統(tǒng)設(shè)置中的亮度設(shè)置項(xiàng)。Android中提供了獲取和設(shè)置系統(tǒng)亮度值(“手動(dòng)模式下的亮度值”)的接口,調(diào)用相應(yīng)的API獲取當(dāng)前的屏幕亮度值和設(shè)置一個(gè)特定的值。返回的亮度值是處于0-255之間的整型數(shù)值。
// 獲取系統(tǒng)亮度
Settings.System.getInt(getContentResolver(),Settings.System.SCREEN_BRIGHTNESS);
// 設(shè)置系統(tǒng)亮度
Settings.System.putInt(getContentResolver(),Settings.System.SCREEN_BRIGHTNESS,systemBrightness);
Android2.X以后的系統(tǒng)中,系統(tǒng)亮度調(diào)節(jié)中新增了“自動(dòng)亮度”選項(xiàng)。“自動(dòng)亮度”是依據(jù)外界光源來自動(dòng)的改變系統(tǒng)亮度,目前大部分手機(jī)中對(duì)“自動(dòng)亮度”還可以進(jìn)行小幅度的調(diào)節(jié)其值。與自動(dòng)亮度相對(duì)應(yīng)的是“手動(dòng)亮度”,當(dāng)處于“手動(dòng)亮度”下,設(shè)置拖動(dòng)亮度進(jìn)度條會(huì)大幅度的改變Android系統(tǒng)亮度。“手動(dòng)亮度”和“自動(dòng)亮度”分別稱之為Android系統(tǒng)的“亮度模式”。
// 獲取系統(tǒng)亮度模式
Settings.System.getInt(getContentResolver(),Settings.System.SCREEN_BRIGHTNESS_MODE);
// 設(shè)置系統(tǒng)亮度模式
Settings.System.putInt(getContentResolver(),Settings.System.SCREEN_BRIGHTNESS_MODE,systemMode);
Android中并未提供處于“自動(dòng)亮度”模式下的亮度值接口。上面的獲取系統(tǒng)亮度值接口實(shí)際上都是指“手動(dòng)亮度”模式下的亮度值。通過手動(dòng)亮度值以及設(shè)置系統(tǒng)亮度模式接口,可以滿足常規(guī)的大部分針對(duì)Android系統(tǒng)亮度設(shè)置編碼需求,以完成系統(tǒng)亮度調(diào)節(jié)。
Android當(dāng)前Window亮度調(diào)節(jié)
常見場景:打開收付款界面時(shí)屏幕亮度變亮
//brightness是一個(gè)0.0-1.0之間的一個(gè)float類型數(shù)值。
Window window = activity.getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
lp.screenBrightness = brightness;
window.setAttributes(lp);
默認(rèn)情況下,當(dāng)我們直接修改了系統(tǒng)亮度值后,當(dāng)前Window中是可以即時(shí)反應(yīng)出來亮度效果的,這是因?yàn)槟J(rèn)情況下,WindowManager.LayoutParams的screenBrightness的默認(rèn)值為WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE。表示W(wǎng)indow沒有自己的亮度參數(shù),將跟隨系統(tǒng)亮度效果的變化。當(dāng)調(diào)整系統(tǒng)亮度后,所有Window都即時(shí)反應(yīng)出系統(tǒng)亮度設(shè)置效果。
Android APP亮度調(diào)節(jié)
Android中并未直接提供針對(duì)于APP層面的亮度調(diào)節(jié)方式。對(duì)于需要進(jìn)行APP的亮度調(diào)節(jié),可以通過系統(tǒng)亮度調(diào)節(jié)或當(dāng)前屏幕的亮度調(diào)節(jié)方式間接來實(shí)現(xiàn)。
- 記錄下系統(tǒng)亮度值和亮度模式,用戶在APP界面時(shí),直接修改系統(tǒng)亮度值,當(dāng)用戶退出此APP,或APP至于后臺(tái)(如按下Home按鍵等),再將記錄的系統(tǒng)亮度值還原。
- 對(duì)每個(gè)Window進(jìn)行亮度設(shè)置,在基類Activity中對(duì)APP亮度值進(jìn)行設(shè)置以實(shí)現(xiàn)每個(gè)當(dāng)前屏幕的亮度調(diào)節(jié)。