Goodroid

GoodroidはAndroidアプリ開発のための情報をコラムやブログで紹介するサイトです。


電池の状態を取得する
ここでは電池の状態を取得する方法を確認していきます。

電池の情報はインテントから「 ACTION_BATTERY_CHANGED 」というブロードキャストレシーバを受け取ることによって取得できます。

実際に取得できる内容は以下の表の通りです。
定数値 内容
health 電池の(健康)状態
icon-small バッテリ状態のアイコンのリソースID
level 電池の残量
scale 電池の最大値
plugged ケーブルの接続状態
present バッテリの有無
status 電池の状態
technology 充電池の種類
temperatur 電池の温度
voltage 電池の電圧

BatteryActivity.java
package goodroid.sample.battery;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.os.Bundle;
import android.util.Log;

public class BatteryActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    @Override
    protected void onResume(){
    	super.onResume();
    	// インテントフィルタの登録
    	IntentFilter filter = new IntentFilter();

    	// インテントフィルタへACTION_BATTERY_CHANGEDアクションを追加
    	filter.addAction(Intent.ACTION_BATTERY_CHANGED);

    	// ブロードキャストレシーバを登録する
    	registerReceiver(mBroadcastReceiver, filter);
    }

    @Override
    protected void onPause(){
    	super.onPause();

    	// ブロードキャストレシーバを取り除く
    	unregisterReceiver(mBroadcastReceiver);
    }

    private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver(){
    	public void onReceive(Context context, Intent intent){
    	  String action = intent.getAction();

    	  // インテントのアクションが「 ACTION_BATTERY_CHANGED 」だった場合
    	  if(action.equals(Intent.ACTION_BATTERY_CHANGED)){

    		// 電池の(健康)状態を取得
    		int health = intent.getIntExtra("health", 0);
    		// バッテリ状態のアイコンのリソースIDを取得
      	int icon = intent.getIntExtra("icon-small", 0);
    		// 電池の残量を取得
    		int level = intent.getIntExtra("level", 0);
      	// 電池の最大値を取得
    		int scale = intent.getIntExtra("scale", 0);
      	// ケーブルの接続状態を取得
    		int plugged = intent.getIntExtra("plugged", 0);
      	// バッテリの有無を取得
    		boolean present = intent.getBooleanExtra("present", false);
      	// 充電の状態を取得
    		int status = intent.getIntExtra("status", 0);
    		// 充電池の種類を取得
    	    String technology = intent.getStringExtra("technology");
    		// 電池の温度を取得
    		int temperature = intent.getIntExtra("temperature", 0);
    		// 電池の電圧を取得
    		int voltage = intent.getIntExtra("voltage", 0);

    		// 電池の状態を表示

                switch (health) {
                case BatteryManager.BATTERY_HEALTH_UNKNOWN:
                    Log.d("BATTERY", "電池の(健康)状態: NKNOWN");
                    break;
                case BatteryManager.BATTERY_HEALTH_DEAD:
                    Log.d("BATTERY", "電池の(健康)状態: DEAD");
                    break;
                case BatteryManager.BATTERY_HEALTH_GOOD:
                    Log.d("BATTERY", "電池の(健康)状態: GOOD");
                    break;
                case BatteryManager.BATTERY_HEALTH_OVERHEAT:
                    Log.d("BATTERY", "電池の(健康)状態: OVERHEAT");
                    break;
                case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE:
                    Log.d("BATTERY", "電池の(健康)状態: OVER VOLTAGE");
                    break;
                case BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE:
                    Log.d("BATTERY", "電池の(健康)状態: UNSPECIFIED FAILURE");
                    break;
                }

    		Log.d("BATTERY", "電池状態のアイコンのリソースID:" + icon);
    		Log.d("BATTERY", "電池の残量:" + level);
    		Log.d("BATTERY", "電池の最大値:" + scale);

                switch (plugged) {
                case BatteryManager.BATTERY_PLUGGED_AC:
                    Log.d("BATTERY", "ケーブルの接続状態: AC");
                    break;
                case BatteryManager.BATTERY_PLUGGED_USB:
                    Log.d("BATTERY", "ケーブルの接続状態: USB");
                    break;
                }

    		Log.d("BATTERY", "電池の有無:" + present);

                switch (status) {
                case BatteryManager.BATTERY_STATUS_CHARGING:
                    Log.d("BATTERY", "充電の状態 : CHARGING");
                    break;
                case BatteryManager.BATTERY_STATUS_DISCHARGING:
                    Log.d("BATTERY", "充電の状態 : DISCHARGING");
                    break;
                case BatteryManager.BATTERY_STATUS_FULL:
                    Log.d("BATTERY", "充電の状態 : FULL");
                    break;
                case BatteryManager.BATTERY_STATUS_NOT_CHARGING:
                    Log.d("BATTERY", "充電の状態 : NOT CHARGING");
                    break;
                case BatteryManager.BATTERY_STATUS_UNKNOWN:
                    Log.d("BATTERY", "充電の状態 : UNKNOWN");
                    break;
                }

    		Log.d("BATTERY", "充電池の種類:" + technology);
    		Log.d("BATTERY", "電池の温度:" + (float)temperature);
    	    Log.d("BATTERY", "電池の電圧:" + (float)voltage);
    	  }
    	}
    };
}

エミュレータでは電池の温度と電圧は取得できないようです。

実行結果

5320 views | コメント:0 | 2012-06-14
コメント
まだこの記事にコメントはありません
コメントの投稿
名前 (必須)

メールアドレス (非公開)

本文(必須)

パスワード (必須)
(半角数字4桁)