有些時候我們需要在我們的應用上為用戶展示當前手機的電量,這時候我們就需要用到廣播了,我們都知道在動態注冊廣播的時候,我們需要傳入一個BroadcastReceiver類對象,還有一個意圖過濾器IntentFilter,平時我們使用自定義廣播的時候IntentFilter中的action可以自定義寫成任意形式,但是如果我們要過去系統電量,就需要用到這個系統為我們提供好的action,Intent.ACTION_BATTERY_CHANGED。同樣的,因為我們監聽的是系統廣播,所以廣播的發送方是系統,我們只需要在需要接受到改廣播的類中注冊廣播就可以了。
1 IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
然后我們自定義了一個BroadcastReceiver,用來處理廣播中的獲得電量的邏輯代碼:
1 package ggcomic.rabbit.lx.ggcomic.broadcastReceiver; 2 3 import android.content.BroadcastReceiver; 4 import android.content.Context; 5 import android.content.Intent; 6 import android.widget.TextView; 7 8 /** 9 * 監聽獲取手機系統剩余電量 10 * Created by Lx on 2016/9/17. 11 */ 12 public class BatteryReceiver extends BroadcastReceiver { 13 private TextView pow; 14 15 public BatteryReceiver(TextView pow) { 16 this.pow = pow; 17 } 18 19 @Override 20 public void onReceive(Context context, Intent intent) { 21 int current = intent.getExtras().getInt("level");// 獲得當前電量 22 int total = intent.getExtras().getInt("scale");// 獲得總電量 23 int percent = current * 100 / total; 24 pow.setText(percent + "%"); 25 } 26 }
這里我們調用intent.getExtras()方法得到intent攜帶的Bundle集合,系統為我們寫好了一些字段,如我們使用的"level","scale",分別是存儲的當前電量和總電量信息。這是約定俗成的,Google的開發工程師為我們寫好的,記住會用就可以。我們這里需要在一個控件上展示出來我們的當前電量,於是我在廣播接收器的構造函數中傳遞進來了該控件的實例。得到當前電量和總電量之后,我們就可以計算出當前電量剩余的百分比,然后設置在控件上。自定義完廣播接收器后,我們還需要在需要接受廣播的類中注冊廣播,如下所示:
1 IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); 2 receiver = new BatteryReceiver(tvElectric); 3 registerReceiver(receiver, filter);
當然,由於我們是動態注冊廣播,所以不要忘了在生命周期的onDestroy()方法中取消注冊廣播:
1 @Override 2 protected void onDestroy() { 3 super.onDestroy(); 4 //銷毀廣播 5 unregisterReceiver(receiver); 6 }
這樣,我們就成功獲得了當前電量的百分比,是不是很簡單呢~