サイト移転のお知らせ:http://techbooster.org/に移転しました

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

10月 28, 2010   //   by kkato   //   デバイス  //  2 Comments

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

以前、システムの起動時にサービスを実行する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の公式リファレンスはこちらです。

関連する記事:

Sponsored Link

2 Comments

技術書新刊 発売中

アンドロイドアカデミアには、CIやテスト、互換検証など実務に生きるノウハウをあつめています

技術書新刊 発売中

Android Next!はAndroid 7.0に対応したはじめての技術書です!


The Web Explorer 2はCSSの中央寄せやWebAudioなど未来を読み解く一冊です


Revised TypeScript in DefinitelylandはTypeScript 2.0(β)に対応した解説書です。インストールから型定義まで幅広くサポートしています


技術書をかこう!はエンジニアらしい執筆環境を構築、HowTo本です