Androidバッテリ

2716 ワード

Androidでは放送で電池の電力情報を取得する.電力量情報は、動的登録放送によってのみ取得できる.
1.0ブロードキャストを登録する2つの方法:
  • 静態登録:機能リストに登録する、ソフトウェアが携帯電話にインストールされていれば、ソフトウェアが起動しなくても、対応する放送を受け取ることができる.
  • 動的登録:登録コードが実行するのみ、対応するブロードキャストを受信することができる.

  • 1.4電力知識点
    (1)電気量に関する放送
    //       
    public static final String ACTION_BATTERY_CHANGED = "android.intent.action.BATTERY_CHANGED";
    //    
    public static final String ACTION_BATTERY_LOW = "android.intent.action.BATTERY_LOW";
    //       .
    // Broadcast Action:  Indicates the battery is now okay after being low.
    public static final String ACTION_BATTERY_OKAY = "android.intent.action.BATTERY_OKAY";
    

    (2)BatteryManagerBatteryManagerクラスには、ACTION_BATTERY_CHANGED放送においてIntentが用いる定数および文字列が全て定義.同時に、電力量を照会する方法と、充電属性を照会する方法も提供する.
    次の2つの一般的な値は、BatterManagerのドキュメントを参照してください.
    //    
    public static final String EXTRA_LEVEL = "level";
    //   
    public static final String EXTRA_TEMPERATURE = "temperature";
    

    1.2キーコード
    リソースを解放するときは、まず子クラスを解放し、親クラスを解放する.例えばonDestory()で先に登録を解除し、親を呼び出すsuper().onDestory()
    /**
     *     
     */
    private void registerBroadcast() {
        //       
        mBatteryReceiver = new BatteryReceiver();
        registerReceiver(mBatteryReceiver,new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
    }
    
    /**
     *          
     */
    class BatteryReceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            //     
            int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
            //     
            setBatteryImg(level);
        }
    }
    /**
     *       
     */
    private void setBatteryImg(int level) {
        if (level <= 0) {
            ivBattery.setImageResource(R.drawable.ic_battery_0);
        } else if (level <= 10) {
            ivBattery.setImageResource(R.drawable.ic_battery_10);
        } else if (level <= 20) {
            ivBattery.setImageResource(R.drawable.ic_battery_20);
        } else if (level <= 40) {
            ivBattery.setImageResource(R.drawable.ic_battery_40);
        } else if (level <= 60) {
            ivBattery.setImageResource(R.drawable.ic_battery_60);
        } else if (level <= 80) {
            ivBattery.setImageResource(R.drawable.ic_battery_80);
        } else if (level <= 100) {
            ivBattery.setImageResource(R.drawable.ic_battery_100);
        } else {
            ivBattery.setImageResource(R.drawable.ic_battery_100);
        }
    }   
    /**
     *     
     */
    @Override
    protected void onDestroy() {
        //      :        
        if (mBatteryReceiver != null) {
            unregisterReceiver(mBatteryReceiver);
        }
        Log.d(TAG, "-- onDestroy");
        super.onDestroy();
    }