Android 監(jiān)聽電量的狀態(tài)

Android 電量相關(guān)的內(nèi)容

監(jiān)控手機電量的變化和充電狀態(tài)

BatteryManager中有一個粘性廣播,不需要BroadcastReceiver作為接收器,在注冊時將傳入null

IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent intent = context.registerReceiver(null, filter);

從intent中就可以獲取相關(guān)的電池的狀態(tài)

當前電量

int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1); //電量的刻度

當前的充電狀態(tài)

int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_UNKNOWN);

充電狀態(tài)值:

狀態(tài) 描述
int BATTERY_STATUS_CHARGING = 2 充電中
int BATTERY_STATUS_DISCHARGING = 3 放電中
int BATTERY_STATUS_NOT_CHARGING = 4 未充電
int BATTERY_STATUS_FULL = 5 已充滿
int BATTERY_STATUS_UNKNOWN = 1 狀態(tài)未知

當前的充電方式

int plug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);

充電的方式

方式 描述
int BATTERY_PLUGGED_AC = 1 使用充電器充電
int BATTERY_PLUGGED_USB = 2 使用USB充電
int BATTERY_PLUGGED_WIRELESS = 4 使用無線方式充電

監(jiān)聽充電狀態(tài)的變化

可以通過注冊靜態(tài)廣播,監(jiān)聽 Intent.ACTION_POWER_CONNECTED Intent.ACTION_POWER_DISCONNECTED

<receiver
  android:name=".PowerReceiver">
  <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 PowerReceiver extends BroadcastReceiver{

  private static final String TAG = PowerReceiver.class.getSimpleName();

  @Override
  public void onReceive(Context context, Intent intent) {
      String action = intent.getAction();
      if(action.equals(Intent.ACTION_POWER_CONNECTED)){
          Log.d(TAG, "power connected");

      }else if(action.equals(Intent.ACTION_POWER_DISCONNECTED)){
          Log.e(TAG, "power disconnected");

      }
  }
}

確定基座的狀態(tài)變化和類型

注冊粘性廣播ACTION_DOCK_EVENT,來判斷是插入底座,以及底座的類型

IntentFilter ifilter = new IntentFilter(Intent.ACTION_DOCK_EVENT);
Intent dockStatus = context.registerReceiver(null, ifilter);

int dockState = dockStatus.getIntExtra(EXTRA_DOCK_STATE, -1); //底座類型
boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED; //是否插入了底座

底座的類型:

底座類型 描述
int EXTRA_DOCK_STATE_CAR = 2 車載底座
int EXTRA_DOCK_STATE_DESK = 1 桌面底座
int EXTRA_DOCK_STATE_LE_DESK = 3 低端(模擬)桌面基座 API >= 11
int EXTRA_DOCK_STATE_HE_DESK = 4 高端(數(shù)字)桌面基座 API >= 11
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容