欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android亮度調(diào)節(jié)的幾種實現(xiàn)方法

 更新時間:2016年11月02日 17:30:53   作者:Windstep  
本篇文章詳細介紹了Android亮度調(diào)節(jié)的幾種實現(xiàn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下。

最近在做一個App的設(shè)置項,亮度調(diào)節(jié)。真正做時,發(fā)現(xiàn)Android亮度調(diào)節(jié)比預(yù)想要復(fù)雜一些。其實目前網(wǎng)上已有不少這方面的資料,但有些博文具有一定誤導(dǎo)性。在此將這塊內(nèi)容按照自己理解整理一下。

整體上看,Android亮度調(diào)節(jié)分為三個層次,分別是:Android系統(tǒng)亮度調(diào)節(jié)、Android App亮度調(diào)節(jié)和Android當(dāng)前屏幕(Window)亮度調(diào)節(jié)。

1.Android系統(tǒng)亮度調(diào)節(jié)

Android系統(tǒng)亮度調(diào)節(jié)全局性最高,常見于系統(tǒng)設(shè)置中的亮度設(shè)置項。Android中提供了獲取和設(shè)置系統(tǒng)亮度值(“手動模式下的亮度值”)的接口,具體如下:

// 獲取系統(tǒng)亮度
Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);
// 設(shè)置系統(tǒng)亮度
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS,systemBrightness);

其中,需要注意的是,返回的亮度值是處于0-255之間的整型數(shù)值。

Android 2.1以后的系統(tǒng)中,系統(tǒng)亮度調(diào)節(jié)中新增了“自動亮度”選項?!白詣恿炼取笔且罁?jù)外界光源來自動的改變系統(tǒng)亮度,目前大部分手機中對“自動亮度”還可以進行小幅度的調(diào)節(jié)其值。與自動亮度相對應(yīng)的是“手動亮度”,當(dāng)處于“手動亮度”下,設(shè)置拖動亮度進度條會大幅度的改變Android系統(tǒng)亮度。“手動亮度”和“自動亮度”分別稱之為Android系統(tǒng)的“亮度模式”。

與之相對應(yīng)的,Android系統(tǒng)中也提供了獲取和設(shè)置“亮度模式”的接口。

// 獲取系統(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è)置系統(tǒng)亮度模式接口,可以滿足常規(guī)的大部分針對Android系統(tǒng)亮度設(shè)置編碼需求,以完成系統(tǒng)亮度調(diào)節(jié)。

 2.Android App亮度調(diào)節(jié)

與系統(tǒng)亮度不同的是,Android中并未直接提供針對于App層面的亮度調(diào)節(jié)方式。因此,對于需要進行App的亮度調(diào)節(jié),可以通過系統(tǒng)亮度調(diào)節(jié)或當(dāng)前屏幕的亮度調(diào)節(jié)方式間接來實現(xiàn)。

3.Android當(dāng)前屏幕(Window)亮度調(diào)節(jié)

Android針對當(dāng)前屏幕(Window)提供了設(shè)置亮度的接口,常見寫法如下:

Window window = activity.getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
lp.screenBrightness = brightness;
window.setAttributes(lp);

其中,需要注意的是此處的brightness是一個0.0-1.0之間的一個float類型數(shù)值。

默認(rèn)情況下,當(dāng)我們直接修改了系統(tǒng)亮度值后,當(dāng)前Window中是可以即時反應(yīng)出來亮度效果的,這是因為默認(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è)置效果。

當(dāng)時,實際項目中我們還會遇到此類需求:系統(tǒng)設(shè)置亮度時只針對當(dāng)前Window或App內(nèi)生效,而不影響到系統(tǒng)本身的亮度設(shè)置。

假設(shè)當(dāng)前Window內(nèi)有一個SeekBar,UI與系統(tǒng)亮度調(diào)節(jié)UI基本類似,用戶可以滑動此SeekBar,使得當(dāng)前Window亮度即時發(fā)生變化,且不影響到系統(tǒng)亮度效果。如何實現(xiàn)呢?

此時我們需要啟用WindowManager.LayoutParams的screenBrightness參數(shù),使之具有自動的特定亮度值,設(shè)置此值后在當(dāng)前Window范圍內(nèi),其將覆蓋掉系統(tǒng)亮度設(shè)置。

因此,有必要將用戶選擇的亮度值轉(zhuǎn)換為相應(yīng)的Window亮度值(為與系統(tǒng)亮度值相一致,假設(shè)SeekBar的最大值為255)。

// 根據(jù)亮度值修改當(dāng)前window亮度
public void changeAppBrightness(Context context, int brightness) {
  Window window = ((Activity) context).getWindow();
  WindowManager.LayoutParams lp = window.getAttributes();
  if (brightness == -1) {
    lp.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE;
  } else {
    lp.screenBrightness = (brightness <= 0 ? 1 : brightness) / 255f;
  }
  window.setAttributes(lp);
}

其中,brightness形參為用戶選擇的亮度值。

那么,上述代碼中為什么有一個"brightness == -1"的判斷呢?在此主要是考慮到App設(shè)置項中可能出現(xiàn)的“跟隨系統(tǒng)亮度”或“恢復(fù)系統(tǒng)默認(rèn)亮度”此類設(shè)置,當(dāng)用戶進行此類操作時,直接將screenBrightness參數(shù)還原成默認(rèn)參數(shù)值即可。因為由前文描述“自動亮度”模式下系統(tǒng)亮度值是不能直接得到的,那么當(dāng)系統(tǒng)處于“自動亮度”模式下,此時brightness參數(shù)值將無法準(zhǔn)確確定,因此,將screenBrightness參數(shù)還原成默認(rèn)參數(shù)值成為一個行之有效的方法。

 4.Android App亮度調(diào)節(jié)可行方案分析

目前網(wǎng)上有不少博文中提到App亮度調(diào)節(jié)時,提出的方案是在App設(shè)置項中,首先記錄下設(shè)置之前的系統(tǒng)亮度值和亮度模式,用戶在App設(shè)置項進行亮度調(diào)節(jié)時,直接修改系統(tǒng)亮度值,當(dāng)用戶退出此App,或App至于后臺(如按下Home按鍵等),再將系統(tǒng)亮度還原。初看起來貌似一個可行的方案。但是主要存在如下幾個問題:

1.如何獲取到設(shè)置之前的系統(tǒng)亮度值和亮度模式(因為之后在此App外部要恢復(fù)系統(tǒng)亮度值到此初始值)?當(dāng)用戶每次進入到設(shè)置頁時獲???嚴(yán)格意義上來說,是沒法準(zhǔn)確記錄的。因為Android的用戶操作不可預(yù)知性,如進入到設(shè)置頁,拖動SeekBar設(shè)置了一個亮度值,此時直接修改了系統(tǒng)的亮度值,如果此時用戶在未將應(yīng)用至于后臺或未將應(yīng)用退出的情況下直接在App外部修改了系統(tǒng)亮度設(shè)置,如小米中可以通過下拉標(biāo)題欄,直接就可以設(shè)置系統(tǒng)亮度。因此,App亮度設(shè)置之前的系統(tǒng)亮度初始值獲取存在困難。

2.如何判斷用戶來到了App外部?因為此時需要恢復(fù)系統(tǒng)亮度設(shè)置到初始系統(tǒng)亮度。如用戶可以按下Home按鍵,長按Home按鍵直接切換App,直接Back按鍵等一步步退出此App,下拉標(biāo)題欄直接點擊其他App通知信息進入到其他App,手機自動鎖屏后解鎖時用戶直接進入其他應(yīng)用等等,此類操作場景也具有不可預(yù)知性,因此,判斷用戶來到了App外部以恢復(fù)系統(tǒng)亮度到初始值的時機上也存在一定困難。

由此,App亮度調(diào)節(jié)方案推薦通過設(shè)置當(dāng)前屏幕(Window)方式進行。

大致思路如下:用戶在設(shè)置項中進行亮度調(diào)節(jié)時,調(diào)用changeAppBrightness()方法,將改變當(dāng)前屏幕(Window)的亮度,此時對系統(tǒng)亮度無任何影響,接下來存在的問題終于要就集中于當(dāng)用戶來到本App其他Activity中,如果使得剛剛設(shè)置的亮度值得以即時反應(yīng)出來。

 當(dāng)用戶進行亮度調(diào)節(jié)后,將當(dāng)前亮度設(shè)置值保存起來(如保存到SharedPreferences中),在基類Activity中的onResume方法中,可以取出SharedPreferences中的用戶所設(shè)置的App亮度值,然后changeAppBrightness()方法以實現(xiàn)每個當(dāng)前屏幕的亮度調(diào)節(jié)。

 總體說來,通過設(shè)置當(dāng)前屏幕(Window)的方式來設(shè)置App亮度更加簡單有效。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android實現(xiàn)跨進程接口回掉的方法

    Android實現(xiàn)跨進程接口回掉的方法

    這篇文章主要給大家介紹了關(guān)于Android如何實現(xiàn)跨進程接口回掉的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Android屏幕及view的截圖實例詳解

    Android屏幕及view的截圖實例詳解

    這篇文章主要介紹了Android屏幕及view的截圖實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Android編程之語音識別實現(xiàn)方法

    Android編程之語音識別實現(xiàn)方法

    這篇文章主要介紹了Android編程語音識別實現(xiàn)方法,結(jié)合實例形式較為詳細的分析了Android語音識別的操作步驟與相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2016-10-10
  • Android仿抖音主頁效果實現(xiàn)代碼

    Android仿抖音主頁效果實現(xiàn)代碼

    這篇文章主要介紹了Android仿抖音主頁效果實現(xiàn),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Android Retrofit原理深入探索

    Android Retrofit原理深入探索

    Retrofit 是一個 RESTful 的 HTTP 網(wǎng)絡(luò)請求框架的封裝,網(wǎng)絡(luò)請求的工作本質(zhì)上是 OkHttp 完成,而 Retrofit 僅負責(zé) 網(wǎng)絡(luò)請求接口的封裝
    2022-11-11
  • Android仿美團網(wǎng)、大眾點評購買框懸浮效果修改版

    Android仿美團網(wǎng)、大眾點評購買框懸浮效果修改版

    這篇文章主要為大家詳細介紹了Android仿美團網(wǎng)、大眾點評購買框懸浮效果的修改版,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Android SlidingDrawer 抽屜效果的實現(xiàn)

    Android SlidingDrawer 抽屜效果的實現(xiàn)

    本篇文章小編為大家介紹,Android SlidingDrawer 抽屜效果的實現(xiàn)。需要的朋友參考下
    2013-04-04
  • Android中使用TextToSpeech的方法

    Android中使用TextToSpeech的方法

    這篇文章主要介紹了Android中TextToSpeech的使用,通過初始化語音,這是一個異步操作,初始化完成后調(diào)用oninitListener,具體實例代碼跟隨小編一起看看吧
    2021-09-09
  • Android studio導(dǎo)出APP測試包和構(gòu)建正式簽名包

    Android studio導(dǎo)出APP測試包和構(gòu)建正式簽名包

    大家好,本篇文章主要講的是Android studio導(dǎo)出APP測試包和構(gòu)建正式簽名包,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2021-12-12
  • 分享五種Android常用布局方式

    分享五種Android常用布局方式

    Android布局是應(yīng)用界面開發(fā)的重要一環(huán),在Android中,共有五種布局方式,分別是:FrameLayout(框架布 局),LinearLayout (線性布局),AbsoluteLayout(絕對布局),RelativeLayout(相對布局),TableLayout(表格布局),小編通過本文逐一給大家詳解
    2015-11-11

最新評論