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