中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android中檢查、監聽電量和充電狀態的方法

發布時間:2020-07-30 08:01:39 來源:網絡 閱讀:3891 作者:DennisRuan 欄目:移動開發

 

Android中檢查、監聽電量和充電狀態的方法

這篇文章主要介紹了Android中檢查、監聽電量和充電狀態的方法,如判斷當前充電狀態、監聽充電狀態的改變、判斷當前剩余電量等,需要的朋友可以參考下

當你在更改后臺更新頻率來減少這些更新對電池壽命的影響時,檢查當前電量和充電狀態是一個好的開始。

電池壽命通過剩余電量和充電狀態來影響應用更新的執行。當用交流電充電時,執行更新操作對設備的影響是微不足道的,所以在大多數案例里,你可以把更新頻率調到最快。如果設備不在充電,降低更新頻率可以幫助延長電池壽命。

類似的,你可以檢查電池剩余電量級別,在電量低時,應該降低更新頻率甚至停止更新。

注:此處的更新,指的是類似發送心跳包的動作,或者定時更新內容。并非僅僅指更新應用版本。如果是用戶動作,比如翻頁刷新,不需要根據電量和充電狀態處理。

判斷當前充電狀態

通過判斷當前充電狀態開始。BatteryManager會通過一個intent廣播所有電池和充電詳情,包含充電狀態。

因為這是一個sticky intent,你不需要注冊廣播接收器。簡單地通過調用 registerReceiver,像下面的代碼段傳入一個null的接收器,當前電池狀態的intent就會返回。你也可以傳入一個真實的接收器對象,但我們暫時不會操作更新,所以這是沒必要的。

復制代碼代碼如下:


IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);
//
你可以讀到充電狀態,如果在充電,可以讀到是usb還是交流電

//
是否在充電
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
status == BatteryManager.BATTERY_STATUS_FULL;

//
怎么充
int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;

通常你應該在使用交流電充電時最大化后臺更新頻率,在使用usb充電時降低,不充電時更低。

監聽充電狀態的改變

充電狀態很容易改變(插入/拔出充電器),所以監聽充電狀態,更改刷新頻率很重要。

充電狀態改變時,BatteryManager會發一個廣播。接收這些事件很重要,甚至在應用沒有運行的時候,因為可能你需要后臺開啟更新服務。所以,在Androidmanifest.xml里注冊廣播接收器,加上兩個action:ACTION_POWER_CONNECTED ACTION_POWER_DISCONNECTED作為過濾。

復制代碼代碼如下:


<receiver android:name=".PowerConnectionReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
</intent-filter>
</receiver>


在關聯的廣播接收器實現里,你可以讀出當前充電狀態,方法跟上一步說的相同:

復制代碼代碼如下:


public class PowerConnectionReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
status == BatteryManager.BATTERY_STATUS_FULL;

int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;
}
}

判斷當前剩余電量

在某些案例里,判斷當前剩余電量同樣很有用。如果電量在某些水平之下,你可能會選擇降低后臺更新頻率。
你可以用下面的代碼讀到電量:

復制代碼代碼如下:


//
當前剩余電量
int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
//
電量最大值
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
//
電量百分比
float batteryPct = level / (float)scale;

注:暫時不知道為什么要這樣算,在我自己的機器上運行,scale就是100的。

監聽剩余電量顯著改變

持續監聽電池狀態不容易,但你不必這么做。
一般來說,持續監聽電池電量對電池的影響比app的正常行為還要大。所以,只監聽剩余電量的指定級別的改變(進入或離開低電量狀態)是一個很好的實踐。
manifest
里聲明的接收器,會在進入或離開低電量狀態時觸發。

復制代碼代碼如下:


<receiver android:name=".BatteryLevelReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_BATTERY_LOW"/>
<action android:name="android.intent.action.ACTION_BATTERY_OKAY"/>
</intent-filter>
</receiver>

剩余電量嚴重不足時,最好禁用所有后臺更新。在你可以使用手機之前就關機了,這種情況下,如果刷新數據并不重要。
在很多情況下,設備是是插入到底座里充電的(好吧,反正我沒見幾個人額外花錢買底座的,可能國外較多)。下節講怎么判斷當前底座狀態和監聽插入底座時改變。文章鏈接:http://www.jb51.net/article/51557.htm

 

Android判斷和監聽底座狀態和類型的方法介紹

這篇文章主要介紹了Android判斷和監聽底座狀態和類型的方法介紹,例如判斷當前底座狀態、判斷插入底座類型、監控充電充電狀態等,需要的朋友可以參考下

底座的狀態跟充電狀態類似,很多底座提供充電功能(座充).
底座狀態同樣使用sticky Intent廣播。可以查詢設備是否插入底座,哪種底座。

判斷當前底座狀態

廣播的ActionACTION_DOCK_EVENTsticky Intent不需要注冊真實的接收器

復制代碼代碼如下:


IntentFilter ifilter = new IntentFilter(Intent.ACTION_DOCK_EVENT);
Intent dockStatus = context.registerReceiver(null, ifilter);
//You can extract the current docking status from the EXTRA_DOCK_STATE extra:

//int dockState = battery.getIntExtra(EXTRA_DOCK_STATE, -1);
boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;

判斷插入底座類型

插入底座有四種類型:

復制代碼代碼如下:

車載
桌面
Low-End (Analog) Desk(
猜是顯示模擬時鐘)
High-End (Digital) Desk(
猜是顯示數字時鐘)

后面兩項是在API11以后引入的,所以,后面三者都判斷是最好的。

復制代碼代碼如下:


boolean isCar = dockState == EXTRA_DOCK_STATE_CAR;
boolean isDesk = dockState == EXTRA_DOCK_STATE_DESK ||
dockState == EXTRA_DOCK_STATE_LE_DESK ||
dockState == EXTRA_DOCK_STATE_HE_DESK;

監控充電

ACTION_DOCK_EVENT會在插入、撥出底座時廣播。所以接收這個廣告就可以了

復制代碼代碼如下:

<action android:name="android.intent.action.ACTION_DOCK_EVENT"/>

可以用上一步相同的方法讀取插入底座的類型和狀態.

 

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

保定市| 永济市| 米脂县| 孝义市| 通州市| 清水县| 郓城县| 泽州县| 白玉县| 图木舒克市| 彩票| 吉林省| 湄潭县| 阜新| 观塘区| 大城县| 林口县| 富阳市| 拜泉县| 瓦房店市| 苏州市| 临汾市| 保德县| 噶尔县| 保靖县| 会昌县| 黄骅市| 固原市| 旌德县| 乌拉特后旗| 酉阳| 临邑县| 石嘴山市| 海丰县| 上虞市| 高陵县| 赣榆县| 宜昌市| 镇安县| 汽车| 武城县|