1. 程式人生 > >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.laodao8.com/article/51557.htm

相關推薦

Android檢查電量充電狀態方法

當你在更改後臺更新頻率來減少這些更新對電池壽命的影響時,檢查當前電量和充電狀態是一個好的開始。 電池壽命通過剩餘電量和充電狀態來影響應用更新的執行。當用交流電充電時,執行更新操作對裝置的影響是微不足道的,所以在大多數案例裡,你可以把更新頻率調到最快。如果裝置不在充電,降低更新頻率可以幫助延長電池壽命。

AndroidScrollView如何滑動距離(總結)

需求:想實現像美團中列表下拉後出現懸浮窗的效果。 思路:首先對ScrollView進行滑動監聽,然後在onScrollChanged()方法中獲取到滑動的Y值,接著進行相關操作即可。 實現步驟: 1、自定義MyScrollView (1)重寫onScrollChang

androidEditText文字方法:addTextChangedListener()

      最近遇到這樣一個問題,想把一個activity文字框中輸入的內容,在跳到另外一個activity時,這個文字框裡的值仍不變。我通過bundle進行了傳遞,但是就是傳不過去。在網上查了資料,原來是沒有用addTextChangedListener()這個方法進行監聽

關於Android使用Uri資料庫的變化

    網上原創的關於監聽資料庫變化的文章很少,基本沒找到有用的一篇,所以自己去看了一下藍芽傳輸的原始碼,寫了一個Demo,放在這裡給大家參考一下,看原始碼:     src裡面有三個檔案MyDataProvider、MainActivity和MyBean,看下面:   

Android各種訊息機制

1、Boadcast, receiverboadcast:sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));receiver:IntentFilter filter = new IntentFilter();        filter

Android 實時監測()網路連線狀態變化

看了網上的很多,都不是自己想要的。所以自己就參考著寫了一個。 實現這個的方法很多,我是想的這種,如果哪有不足,有bug的地方希望大家指出,共同進步。。。。 先簡單說一下思路:網路變化時系統會發出廣播。所以我們監聽這個廣播,利用介面回撥通知activity做

Android監測電量充電狀態

Contents 監測電量和充電狀態... 1 確定當前充電狀態... 1 監測充電狀態變化... 1 確定當前電量水平... 2 監測電量的重要變化... 2   監測電量和充電狀態 當你調整後臺更新的頻率以降低頻繁更新導致電池老化的問題時,從檢查當前電量

Android 優化電池使用時間 ——監控電池電量充電狀態

時常看Android官網開發文件,最近突然發現Android官網提供了一些中文翻譯文件,真心感覺不錯。考慮很大一部分童鞋都生活在大中華局域網裡,不能暢遊世界,特轉載相關係列文件,以供大家一起學習,原文參見此處。 監控電池電量和充電狀態 如果您要更改後

Android與JS互動,url實時變化的方法.

private class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view,

檢測電池電量充電狀態

當我們想要更改後臺資料的重新整理速率來減少對使用者影響的時候,先檢測下當前的剩餘電量和充電狀態是個不錯的開始。 在執行更新資料操作對使用者電池壽命的影響取決於當前的剩餘電量和充電狀態。當裝置在通過交流電充電的時候去更新資料對裝置電池壽命的影響是微不足道的,所以在

《老羅Android電量變化Broadcast實現開機啟動

1. Broadcast監聽電量變化    如果我們閱讀軟體,可能是全屏閱讀,這個時候使用者就看不到剩餘的電量,我們就可以為他們提供電量的資訊。要想做到這一點,我們需要接收一條電量變化的廣播,然後獲取百分比資訊.public class MainActivity exten

如何讓oracle DBoem開機啟動(dbstart)

監聽和oem開機啟動如何讓oracle DB、監聽和oem開機啟動(dbstart)讓oracle DB、監聽和oem開機啟動(dbstart)Oracle提供了伴隨操作系統自動重啟的功能,在Windows中,可以修改“我的電腦-->管理-->服務-->OracleService$ORACL

android實現可自由移動點選事件的懸浮窗

最近因為專案需要,自己實現了個可以自由移動,並且長按可以跳出一個控制播放的,額,大的懸浮窗。 好,開始吧。首先我們先聊許可權,懸浮窗需要在manifest中宣告一個許可權: <uses-permission android:name="androi

Android 簡訊(同時廣播資料庫)

暗釦,強烈譴責這種侵害使用者利益的行為。。。 下面給大家介紹Android暗釦原理.......  Android4.4以下的系統玩遊戲就要小心了哈 暗釦方式之一:簡訊訂購,即監聽--------攔截------------處理簡訊。 暗釦方式之二:模擬人為操作(又叫模擬流

Oracle“無程式”“協議介面卡錯誤”的解決方法

一、發現問題 有些防毒程式會清掉一些oracle登錄檔資訊或刪除oracle的bin目錄下的一些.exe檔案,導致資料庫無法啟動,下面來分析一下最常見的問題。二、無監聽程式 1、什麼是監聽器(LISTENER) 監聽器是建立在服務端的,用於監聽客戶端向資料庫伺服器端提出的連線請求。 配置檔案在\db_1\NE

android 電話狀態(來電去電)實現程式碼

從事android開發的朋友們可能電話狀態監聽不是很擅長,接下來將詳細介紹電話狀態監聽功能的實現步驟,需要了解的朋友可以參考下。 實現手機電話狀態的監聽,主要依靠兩個類:TelephoneManger和PhoneStateListener。 TelephonseMange

Android 自定義Dialog類,並在Activity實現按鈕

實際開發中,經常會用到Dialog,比如退出時候會彈出是否退出,或者還有一些編輯框也會用Dialog實現,效果圖如下: 開發中遇到的問題無非在於如果在Activity中監聽這個Dialog中實現的按鈕,Dialog類如下,在MyDialog這個類中實現了一個LeaveMyDialogLi

Android手機來電及狀態

在專案中,需要監聽手機來電和簡訊息。 手機來電沒有專門的廣播,但是Android中有關於電話狀態改變的廣播:android.intent.action.PHONE_STATE。 其中撥電話廣播:android.intent.action.NEW_OUTGOING_CA

實戰Android:通過BroadcastReceiverHome,電源Power,音量變化Volume鍵

上一個例子是採用AccessibilityService來實現按鍵的監聽。這次我們採用BroadcastReceiver來完成按鍵的監聽。 缺點:我嘗試了一下,暫時還不知道如何停止按 鍵的預設行為,比如我確實監聽到了電源按鍵,但卻沒法阻止此刻螢幕變黑的行為。先在這記下。以後

Android 系統語言切換設定

最近專案上產品經理提了個需求,要求關閉語言國際化,不管手機系統設定那個國家的語言,都要顯示漢語,好吧,既然有需求,那就做吧。但是專案中已經有英文的配置了,且是作為預設String提供的,這麼多翻譯好的文字,直接刪除掉替換成中文為預設String又感覺棄之可惜。故網上Goog