バッテリー情報の確認方法 – Android

いまさら?って感じもするけどAndroidのバッテリー情報を取得する方法です。

いってみよ!

BroadcastReceiverをnewするメソッド

public static BroadcastReceiver statusReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        String text = "取得してない";

        if (intent.getAction().equals(Intent.ACTION_BATTERY_CHANGED)) {
            boolean present = intent.getBooleanExtra("present", false);
            int level = intent.getIntExtra("level", 0);
            int scale = intent.getIntExtra("scale", 0);
            int iconSmall = intent.getIntExtra("icon-small", 0);
            int health = intent.getIntExtra("health", 0);
            int voltage = intent.getIntExtra("voltage", 0);
            int temperature = intent.getIntExtra("temperature", 0);
            String technology = intent.getStringExtra("technology");

            int status = intent.getIntExtra("status", 0);
            int plugged = intent.getIntExtra("plugged", 0);

            String statusText = "???";
            switch (status) {
                case BatteryManager.BATTERY_STATUS_UNKNOWN:
                    statusText = "Unknown";
                    break;
                case BatteryManager.BATTERY_STATUS_CHARGING:
                    statusText = "Charging";
                    break;
                case BatteryManager.BATTERY_STATUS_DISCHARGING:
                    statusText = "Discharging";
                    break;
                case BatteryManager.BATTERY_STATUS_NOT_CHARGING:
                    statusText = "Not charging";
                    break;
                case BatteryManager.BATTERY_STATUS_FULL:
                    statusText = "Full";
                    break;
            }

            String healthText = "???";
            switch (health) {
                case BatteryManager.BATTERY_HEALTH_UNKNOWN:
                    healthText = "Unknown";
                    break;
                case BatteryManager.BATTERY_HEALTH_GOOD:
                    healthText = "Good";
                    break;
                case BatteryManager.BATTERY_HEALTH_OVERHEAT:
                    healthText = "Overheat";
                    break;
                case BatteryManager.BATTERY_HEALTH_DEAD:
                    healthText = "Dead";
                    break;
                case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE:
                    healthText = "Voltage";
                    break;
                case BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE:
                    healthText = "Failure";
                    break;
            }

            String pluggedText = "???";
            switch (plugged) {
                case BatteryManager.BATTERY_PLUGGED_AC:
                    pluggedText = "AC";
                    break;
                case BatteryManager.BATTERY_PLUGGED_USB:
                    pluggedText = "USB";
                    break;
            }
            text = "present 有無:" + present;
            text += "\n" + "level 残量:" + level;
            text += "\n" + "scale 残量の最大値:" + scale;
            text += "\n" + "health 健康状態:" + healthText;
            text += "\n" + "voltage 電圧(mV):" + voltage;
            text += "\n" + "temperature 温度(*0.1):" + temperature;
            text += "\n" + "technology:" + technology;
            text += "\n" + "status 充電状態:" + statusText;
            text += "\n" + "plugged 接続:" + pluggedText;
            text += "\n" + "icon_small アイコンID:" + iconSmall;
        }
        Log.d(text);
    }
};

BroadcastReceiverの登録と解除

ActivityやFragmentのライフサイクルのほどよい箇所でブロードキャストを登録したり解除したりします。

addActionで「Intent.ACTION_BATTERY_CHANGED」をつけとく。

@Override
public void onResume() {
    super.onResume();
    // Regist Receiver
    IntentFilter filter = new IntentFilter();
    filter.addAction(Intent.ACTION_BATTERY_CHANGED);
    getActivity().registerReceiver(statusReceiver, filter);
}

@Override
public void onPause() {
    super.onPause();
    // Receiver unregist
    getActivity().unregisterReceiver(statusReceiver);
}

FragmentだったのでgetActivity()つけてるけど、普通のActivityなら要らんです。

取得できる情報の「technology」ってなんなんだろ?

参考記事

残量などバッテリーの情報を取得する
http://techbooster.jpn.org/andriod/device/1586/

バッテリーの情報(Battery information)を取得するには
http://www.adakoda.com/android/000140.html