監測電池電量和充電狀態

監測電池電量和充電狀態

當你改變你的背景更新的頻率,以減少對電池壽命的影響,這些更新,檢查當前電池電量和充電狀態,是一個良好的開端。

進行應用程序的更新取決於電池的電量和充電狀態的設備的電池壽命的影響。的設備進行更新,同時通過交流充電的影響是可以忽略不計,所以在大多數情況下,可以最大限度地發揮你的刷新率,只要設備連接到壁式充電器。相反,如果該設備是放電,減少您的更新速率,可以延長電池的使用壽命。

同樣的,你也可以檢查電池的充電水平,有可能減少甚至停止更新的頻率,當電池電量幾乎耗盡。

確定當前的充電狀態


首先確定當前的充電狀態。BatteryManager 廣播一個棘手的 Intent ,其中包括充電狀態的電池和充電的細節。

因爲這是一個棘手的意圖,你不需要註冊一個的BroadcastReceiver通過簡單地調用registerReceiver通過的接收器在未來的片段所示,當前的電池狀態的意圖,則返回。你可以通過在實際的BroadcastReceiver對象,但我們將在後面的章節更新的處理,所以它不是必要的。

IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);

您可以提取當前的充電狀態,如果設備正在充電時,無論是通過USB或AC充電器充電:

// 充電/充電了嗎?
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
                     status == BatteryManager.BATTERY_STATUS_FULL;

// 我們如何充電?
int chargePlug = battery.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;
boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;

通常情況下,你應該最大化的背景更新率的情況下,該裝置被連接到交流充電器,降低的速率,如果電荷是通過USB,如果電池被放電,並進一步降低它。

監控充電狀態的變化


的充電狀態可以輕易改變一個設備可以插入,所以重要的是要監控充電狀態的變化,並相應地改變你的刷新率。

在的BatteryManager廣播的行動時,將設備連接或斷開電源。重要的是要接收這些事件,即使是在你的應用程序沒有運行,特別是這些事件的影響如何,往往你啓動你的應用程序以啓動後臺更新,所以你應該在你的清單中註冊的BroadcastReceiver聽這兩個事件定義的 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>

在相關的BroadcastReceiver實現,您可以提取當前充電狀態和方法,在上一步中。

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 == BATTERY_PLUGGED_USB;
        boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;
    }
}

確定當前的電池電量


在某些情況下,它也是有用的,以確定當前的電池電量。你可以選擇你的背景更新率降低,如果電池電量低於一定的水平。

您可以發現,目前的電池充電,電池狀態意圖通過提取當前的電池電量和規模如下圖所示:

int level = battery.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = battery.getIntExtra(BatteryManager.EXTRA_SCALE, -1);

float batteryPct = level / (float)scale;

在電池電量監控重大變化


你不能很容易地持續監控電池狀態,但你並不需要。

一般來說,不斷監測電池電量的影響有一個更大的衝擊對電池的比你的應用程序的正常行爲,所以它是很好的做法,以只監測電池電量的顯着變化,特別是當該設備進入或退出一個低電池狀態。

下面的代碼段的清單中提取的意圖過濾器元件內的廣播接收器。接收器被觸發,只要設備電池電量低或退出低的條件聽的ACTION_BATTERY_LOWACTION_BATTERY_OKAY, 

<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>

這是比較好的做法是禁用所有後臺更新,當電池電量嚴重不足。不要緊,如何新鮮的是,如果你的數據在手機自動關機,然後纔可以使用它。

在許多情況下,充電的設備的行爲,是一致把到船塢。下一課將告訴您如何確定當前的船塢狀態和監控設備對接的變化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章