亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

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

2020-04-11 11:49:19
字體:
來源:轉載
供稿:網友

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

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

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

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

判斷當前充電狀態

通過判斷當前充電狀態開始。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>

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色老头一区二区三区| 清纯唯美日韩制服另类| 国产精品日韩欧美| 成人性生交大片免费观看嘿嘿视频| 51色欧美片视频在线观看| 97人人模人人爽人人喊中文字| 亚洲欧洲激情在线| 一区二区欧美日韩视频| 国产精品18久久久久久麻辣| 成人免费在线视频网站| 日本精品一区二区三区在线| 欧美性xxxx18| 久久视频国产精品免费视频在线| 国产69精品久久久久9999| 亚洲精品98久久久久久中文字幕| 欧美成人精品在线观看| 日本久久久久久| 欧美在线欧美在线| 免费av在线一区| 欧美电影免费观看大全| 高清亚洲成在人网站天堂| 国产精品va在线播放我和闺蜜| 日韩中文视频免费在线观看| 欧美精品激情在线| 九九热在线精品视频| 久久精品成人一区二区三区| 久久亚洲春色中文字幕| 91最新在线免费观看| 成人精品视频在线| 日韩中文在线观看| 亚洲人成网7777777国产| 美女福利视频一区| 精品久久久久久亚洲国产300| 亚洲精品久久7777777| 日韩av片永久免费网站| 成人免费视频xnxx.com| 91九色在线视频| 萌白酱国产一区二区| 日本不卡免费高清视频| 国产不卡av在线免费观看| 日韩欧美中文第一页| 68精品国产免费久久久久久婷婷| 热久久视久久精品18亚洲精品| 精品人伦一区二区三区蜜桃网站| 91免费福利视频| 欧美国产在线电影| 国产视频综合在线| 亚洲欧美资源在线| 欧美视频13p| 成人国产精品久久久| 色午夜这里只有精品| 色午夜这里只有精品| 久久成人av网站| 欧美日韩国产综合新一区| 91av在线免费观看| 国产一区二区三区视频免费| 国产精品电影网| 国产精品嫩草影院久久久| 亚洲第一网站男人都懂| 国产成人精品免费久久久久| 国产精品成人一区| 久久国内精品一国内精品| 欧美日韩中文字幕日韩欧美| 另类美女黄大片| 国产精品无av码在线观看| 欧美日韩亚洲一区二区三区| 欧美一级大片视频| 日本午夜人人精品| 色综合91久久精品中文字幕| 91精品在线一区| 国产精品视频一区二区三区四| 日韩大片免费观看视频播放| 日本一区二三区好的精华液| 欧美黄色小视频| 欧美性猛交xxxx免费看久久久| 中文字幕欧美日韩在线| 亚洲成色777777女色窝| 国产精品精品一区二区三区午夜版| 日韩影视在线观看| 日韩精品在线免费播放| 欧美精品福利在线| 亚洲欧美国产精品久久久久久久| 国产欧美日韩精品专区| 国内精品免费午夜毛片| 国产精品人成电影在线观看| 欧洲成人在线观看| 欧美精品久久久久久久免费观看| 久久久久久一区二区三区| 国产ts人妖一区二区三区| 成人国产亚洲精品a区天堂华泰| 97涩涩爰在线观看亚洲| 国产97人人超碰caoprom| 久久久亚洲国产天美传媒修理工| 粉嫩老牛aⅴ一区二区三区| 2021久久精品国产99国产精品| 国模精品视频一区二区三区| 成人乱色短篇合集| 精品久久久久久久久中文字幕| 欧美激情亚洲另类| 久久99国产综合精品女同| 欧美电影在线观看完整版| 国产91精品久久久久| 97香蕉超级碰碰久久免费软件| 亚洲大胆人体在线| 日韩激情av在线播放| 国产经典一区二区| 亚洲人成免费电影| 欧美日韩激情网| 日韩欧美国产网站| 久久精品99久久久香蕉| 精品一区二区三区四区| 久久免费视频这里只有精品| 亚洲欧美一区二区三区在线| 精品国产视频在线| 国产欧美精品一区二区三区-老狼| 亚洲国产精品久久久| 91九色视频导航| 日韩欧美精品中文字幕| 亚洲精品日产aⅴ| 亚洲精品日韩激情在线电影| 日韩欧美999| 色综合久久久久久中文网| 国产精品成人观看视频国产奇米| 国产在线日韩在线| 狠狠躁18三区二区一区| 91亚洲精华国产精华| 日韩在线观看成人| 超碰日本道色综合久久综合| 国产精品黄视频| 91久久国产精品91久久性色| 成人亚洲综合色就1024| 国产91热爆ts人妖在线| 国产免费成人av| 欧美激情一区二区三级高清视频| 日韩va亚洲va欧洲va国产| wwwwwwww亚洲| 亚洲性无码av在线| 亚洲欧美综合区自拍另类| 国产一区二区三区在线| 亚洲欧美激情四射在线日| 亚洲区中文字幕| 国内精品国产三级国产在线专| 91chinesevideo永久地址| 国产成人精品av在线| 日韩精品高清在线| 国产精品丝袜久久久久久不卡| 九九热这里只有在线精品视| 日韩av一区在线| 一级做a爰片久久毛片美女图片| 久久中文精品视频| 久久精品中文字幕一区| 欧美激情图片区| 亚洲精品一区二区三区不| 国产精品视频一区二区高潮| 丝袜美腿亚洲一区二区| 欧美日韩免费观看中文| 国产亚洲精品成人av久久ww| 亚洲欧美日韩精品| 亚洲欧洲国产一区| 韩日欧美一区二区| 欧美日韩国产二区| 91久久在线播放| 精品久久久久久久久久久久久| 91久久中文字幕|