標籤:android broadcastreceiver java battery
Android系統中即時的監聽手機電量以及開機啟動功能都是通過BroadcastReceiver組件實現的。我們可以動態註冊這個類的一個執行個體通過Context.registerReceiver()方法或者靜態註冊,通過<Receiver>標記在androidmanifest . xml。注意:如果我們註冊一個接收器在Activity.onResume()實現,我們應該登出Activity在Activity生命週期的onPause方法中。(這將減少不必要的系統開銷)。切記不能登出Activity在onSaveInstanceState(),因為這個方法不會被啟動直到使用者回到曆史堆棧。下面我們通過動態註冊BroadcastReceiver來實現電量的監聽。
(1)在資訊清單檔添加許可權
<uses-permission android:name="android.permission.BATTERY_STATS"/>
(2)在Activity生命週期註冊登出Receiver
@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();reciver=new BatteryBroadcastReciver();//建立一個過濾器IntentFilter intentFilter=new IntentFilter(Intent.ACTION_BATTERY_CHANGED);registerReceiver(reciver, intentFilter);}@Overrideprotected void onPause() {// TODO Auto-generated method stubsuper.onPause();unregisterReceiver(reciver);}
(3)繼承BroadcastReceiver介面
public class BatteryBroadcastReciver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if(intent.getAction().equals(Intent.ACTION_BATTERY_CHANGED)){
//得到系統當前電量
int level=intent.getIntExtra("level", 0);
//取得系統總電量
int total=intent.getIntExtra("scale", 100);
textView.setText("當前電量:"+(level*100)/total+"%");
//當電量小於15%時觸發
if(level<15){
Toast.makeText(MainActivity.this, "當前電量已小於15%",Toast.LENGTH_LONG).show();
}
}
}
}