2012年10月9日火曜日

Androidで設定を参照, 操作するあれこれ -バッテリー編-

久々のAndroidキター
ただいまjava!私は帰ってきた!+(・ω・0)*




まあメモるのは初めてなんですがね(;´Д`)


内容は

androidの設定を操作するアプリの作成

ということでそのパーツ毎にちらほらとメモしていく予定


まずはバッテリー編からφ(・ω・`)

android端末のバッテリー情報を取得


端末のバッテリー情報を取るならIntent.ACTION_BATTERY_CHANGEDのお世話になるのが楽.
…他にも方法あるのかな

このIntentは, システムが「バッテリーの残量や状態が変更された時」, その情報を載せてIntentを発行していてくれている(らしい)

なのでこれを受信する受信機を用意してやればいい, とのこと

そこで登場するのがBroadcastReceiverクラス
ブロードキャスト化されたIntentを拾えるこのクラスを継承して, BatteryReceiverなるクラスを作ります

1. Receiverの作成


public static final class BatteryReceiver extends BroadcastReceiver {

  @Override
  public void onReceive(final Context context, final Intent intent) {
                        // actionの取得
   String action = intent.getAction();
                        // actionの確認. Intent.ACTION_BATTERY_CHANGED以外のintentは排除する
   if (!action.equals(Intent.ACTION_BATTERY_CHANGED)) {
    Log.d("BatteryReceiver ", "action is " + action);
    return;
   }

   // 状態, 「充電中」等の状態がintで取れる
   int status = intent.getIntExtra("status", 0);
   // 電池残量, デフォルトは0.
   int level = intent.getIntExtra("level", 0);

   Log.d("level", level + "%");
  }
 }

とりあえずシンプルにバッテリーの状態と残量(%)だけを取得するクラス.
このレシーバーを立てておく. 立て方は後々
Intent.ACTION_BATTERY_CHANGEDを受け取るとonReceiveが呼ばれて処理スタート.
まずはコメントにあるとおり, 余計なIntentはreturnで排除.
・・・余計なIntentって入ってくるのかな.
その後はもうお好きに.
Intentからお好みの情報を引き出して操作するだけ.
Intentに含まれる値に関しては参考を参照.

参考:http://www.adakoda.com/android/000140.html

また, このonReceiveはオーバーライドメソッドなので, ココ以外に値を持ち出すときは一工夫必要.
上記をまるっと内部クラスにしてやるのが一番扱いやすい・・・?

ほかにもServiceクラスに乗せるなどの使い方も.
ここで得られる値もWidget向きだったりするのでServiceで使うのもアリ・・・?

疑問系ばかりであるorz

2. Filterの登録


BatteryReceiver receiver = new BatteryReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(receiver, filter);

Receiverが出来たら, 今度はIntentFilterをかけてやる. こちらはActivityならonCreateやonResumeなどで宣言してやるといい.
1,2行目で作ったReceiverとIntentFilterをインスタンス化.
3行目の addAction メソッドで件の Intent.ACTION_BATTERY_CHANGED をfilterが受け取ることを宣言.
4行目でそのfilterとreceiverを関連付けて宣言は終了.
あとはこのメソッドを通るように起動させればReceiver起動.


IntentがくるたびにReceiverが動いてくれる.

3. Receiverの破棄

unregisterReceiver(receiver);
これだけ.
これをonDestoryなど, もう要らないと判断される時に呼べばいい.
ただonPauseがいいのかonDestoryがいいのかは微妙….
もっと他にいいとこあるかも…?

これで必要なパーツはそろい踏み.

Widgetなんかにしてバッテリー残量によってアクションが変わるアプリなんかが作りやすいかも.








…アプリ自体がバッテリー食うのは内緒( ´д)ヒソ(´д`)ヒソ(д` )

0 件のコメント:

コメントを投稿

AWS CDKで立てたEC2インスタンスのTimeZoneとかいじりたかった話

EC2を立てることはできたけど、立てたインスタンスは UTCのままだし設定ファイルとかいちいちscpしてくるのはダルい。 当初UserDataでなんとかしようとしたものの、「書く量がヤバいしメンテしにくい」と悩んでいたところ見かけたのが  AWS::CloudFormation:...