残量などバッテリーの情報を取得する


今回はバッテリーの状態変化を取得する方法を説明します。
バッテリー残量や充電中か否かの情報を知りたいということがあるかと思います。

以前、システムの起動時にサービスを実行するBroadcast Intentの種類をいくつか紹介しましたが、その中のACTION_BATTERY_CHANGEDを利用します。

それではサンプルソースとともに説明してきます。

Intent Filterの設定

IntentFilterクラスのaddActionメソッドを使ってIntent.ACTION_BATTERY_CHANGEDを受け取るように設定します。

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(broadcastReceiver_, intentFilter);

broadcastReceiver_はBroadcastReceiverクラスです。このクラスでIntentを受け取って必要な情報を取得します。
その情報については下記で説明します。

バッテリーの情報

Intentクラスの付加情報を取得することで情報を得ることができます。

intent.getIntExtra("health", 0)

のように取得します。

下記にサンプルソースを載せます。コメントにそれぞれの値の簡単な説明を記します。

private BroadcastReceiver broadcastReceiver_ = new BroadcastReceiver() {
		@Override
		public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(Intent.ACTION_BATTERY_CHANGED)) {
                // バッテリーの状態
                switch (intent.getIntExtra("health", 0))) {
                case BatteryManager.BATTERY_HEALTH_UNKNOWN:
                    Log.d("BatteryChange", "Health : NKNOWN");
                    break;
                case BatteryManager.BATTERY_HEALTH_DEAD:
                    Log.d("BatteryChange", "Health : DEAD");
                    break;
                case BatteryManager.BATTERY_HEALTH_GOOD:
                    Log.d("BatteryChange", "Health : GOOD");
                    break;
                case BatteryManager.BATTERY_HEALTH_OVERHEAT:
                    Log.d("BatteryChange", "Health : OVERHEAT");
                    break;
                case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE:
                    Log.d("BatteryChange", "Health : OVER VOLTAGE");
                    break;
                case BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE:
                    Log.d("BatteryChange", "Health : UNSPECIFIED FAILURE");
                    break;
                }

                // AC or USB
                switch (intent.getIntExtra("plugged", 0)) {
                case BatteryManager.BATTERY_PLUGGED_AC:
                    Log.d("BT", "Plugged : AC");
                    break;
                case BatteryManager.BATTERY_PLUGGED_USB:
                    Log.d("BT", "Plugged : USB");
                    break;
                }

                // 充電状態
                switch (intent.getIntExtra("status", 0)) {
                case BatteryManager.BATTERY_STATUS_CHARGING:
                    Log.d("BatteryChange", "Status : CHARGING");
                    break;
                case BatteryManager.BATTERY_STATUS_DISCHARGING:
                    Log.d("BatteryChange", "Status : DISCHARGING");
                    break;
                case BatteryManager.BATTERY_STATUS_FULL:
                    Log.d("BatteryChange", "Status : FULL");
                    break;
                case BatteryManager.BATTERY_STATUS_NOT_CHARGING:
                    Log.d("BatteryChange", "Status : NOT CHARGING");
                    break;
                case BatteryManager.BATTERY_STATUS_UNKNOWN:
                    Log.d("BatteryChange", "Status : UNKNOWN");
                    break;
                }

                // バッテリーが存在するかどうか
                Log.d("BatteryChange", "Present : " + String.valueOf(intent.getBooleanExtra("present", false)));

                // バッテリー残量の最大値
                Log.d("BatteryChange", "Scale : " + String.valueOf(intent.getIntExtra("scale", 0)));

                // バッテリー残量
                Log.d("BatteryChange", "Level : " + String.valueOf(intent.getIntExtra("level", 0)));

                // バッテリー電圧 単位:mV
                Log.d("BatteryChange", "Voltage : " + String.valueOf(intent.getIntExtra("voltage", 0)));

                // バッテリー電圧 単位:0.1度
                Log.d("BatteryChange", "Temperatue : " + String.valueOf((float)(intent.getIntExtra("temperature", 0)) / 10));
            }
		}
    };

実行した結果です。

BatteryManagerの公式リファレンスはこちらです。

One Comment