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 |