通常,獲取手機電量會寫一個IntentFilter,BroadcastReceiver,然后注冊registerReceiver(batteryReceiver, intentFilter);
等待onReceive回調再去解析intent來獲取電量(注冊后會第一時間回調一次,所以基本上可以馬上獲得電量信息)
IntentFilter intentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
class BatteryReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
//判斷它是否是為電量變化的Broadcast Action
if(Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())){
//獲取當前電量
int level = intent.getIntExtra("level", 0);
//電量的總刻度
int scale = intent.getIntExtra("scale", 100);
//把它轉成百分比
tv.setText("電池電量為"+((level*100)/scale)+"%");
}
}
}
不過我后來發現registerReceiver方法會返回intent對象,如果IntentFilter過濾的是Intent.ACTION_BATTERY_CHANGED,
那么從registerReceiver方法會返回的intent對象中也可以獲得電量信息的。
如果我們獲取電量是一次性的,不需要持續監聽電量變化,那么可以這樣:Intent intent = registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
然后對intent處理即可。
以前沒注意過registerReceiver的返回值,在此mark一下O(∩_∩)O~
