Android亮度調(diào)節(jié)關(guān)鍵API與技巧,實(shí)現(xiàn)APP亮度個性化設(shè)置
Android系統(tǒng)亮度調(diào)節(jié)
Android系統(tǒng)亮度調(diào)節(jié)全局性最高,常見于系統(tǒng)設(shè)置中的亮度設(shè)置項(xiàng)。Android中提供了獲取和設(shè)置系統(tǒng)亮度值(“手動模式下的亮度值”)的接口,調(diào)用相應(yīng)的API獲取當(dāng)前的屏幕亮度值和設(shè)置一個特定的值。返回的亮度值是處于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é)中新增了“自動亮度”選項(xiàng)?!白詣恿炼取笔且罁?jù)外界光源來自動的改變系統(tǒng)亮度,目前大部分手機(jī)中對“自動亮度”還可以進(jìn)行小幅度的調(diào)節(jié)其值。與自動亮度相對應(yīng)的是“手動亮度”,當(dāng)處于“手動亮度”下,設(shè)置拖動亮度進(jìn)度條會大幅度的改變Android系統(tǒng)亮度?!笆謩恿炼取焙汀白詣恿炼取狈謩e稱之為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中并未提供處于“自動亮度”模式下的亮度值接口。上面的獲取系統(tǒng)亮度值接口實(shí)際上都是指“手動亮度”模式下的亮度值。通過手動亮度值以及設(shè)置系統(tǒng)亮度模式接口,可以滿足常規(guī)的大部分針對Android系統(tǒng)亮度設(shè)置編碼需求,以完成系統(tǒng)亮度調(diào)節(jié)。
Android當(dāng)前Window亮度調(diào)節(jié)
常見場景:打開收付款界面時屏幕亮度變亮
//brightness是一個0.0-1.0之間的一個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中是可以即時反應(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都即時反應(yīng)出系統(tǒng)亮度設(shè)置效果。
Android APP亮度調(diào)節(jié)
Android中并未直接提供針對于APP層面的亮度調(diào)節(jié)方式。對于需要進(jìn)行APP的亮度調(diào)節(jié),可以通過系統(tǒng)亮度調(diào)節(jié)或當(dāng)前屏幕的亮度調(diào)節(jié)方式間接來實(shí)現(xiàn)。
- 記錄下系統(tǒng)亮度值和亮度模式,用戶在APP界面時,直接修改系統(tǒng)亮度值,當(dāng)用戶退出此APP,或APP至于后臺(如按下Home按鍵等),再將記錄的系統(tǒng)亮度值還原。
- 對每個Window進(jìn)行亮度設(shè)置,在基類Activity中對APP亮度值進(jìn)行設(shè)置以實(shí)現(xiàn)每個當(dāng)前屏幕的亮度調(diào)節(jié)。