端末のバッテリー充電レベルを監視する
バッテリーの充電レベルを監視するには、バッテリーの充電レベルが変化するたびに端末から発信されるバッテリー充電レベルのインテントをブロードキャストレシーバーで受信する必要があります。
<流れ>
1.端末のバッテリー受電レベルが変化
↓
2.システムがバッテリー充電レベルの変化インテントを発信する
↓
3.アプリがブロードキャストレシーバーでインテントを受信
↓
4.アプリがバッテリー充電レベルの表示を更新する
サンプルコード①(MainActivity.java)
ブロードキャストレシーバーのコードは別ファイルではなく MainActivity.java 内に記述します。(※詳しい説明はコード内のコメントを見てください。)
public class MainActivity extends Activity {
//インテントフィルターの箱を用意
private IntentFilter intentFilter1;
//テキストビューの箱を用意
public static TextView textView1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//レイアウトファイルをViewにセットする
setContentView(R.layout.activity_main);
//レイアウトファイルにあるテキストビュー「disp_level」を取得して格納
textView1 = (TextView)findViewById(R.id.disp_level);
//インテントフィルターをインスタンス化
intentFilter1 = new IntentFilter();
//インテントフィルターにバッテリー残量のアクションを追加
intentFilter1.addAction(Intent.ACTION_BATTERY_CHANGED);
//ブロードキャストレシーバーとインテントフィルターを登録
registerReceiver(mbroadcastReceiver, intentFilter1);
}
//アプリが破棄(終了)される時に呼び出される
@Override
protected void onDestroy() {
super.onDestroy();
//ブロードキャストレシーバーの登録を解除
unregisterReceiver(mbroadcastReceiver);
}
////////////////////////////////////////////////////////////////////////////////
////////////////////ブロードキャストレシーバー//////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
private static BroadcastReceiver mbroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//バッテリー関連のインテントを受信した場合
if (intent.getAction() == Intent.ACTION_BATTERY_CHANGED) {
//テキストビューにバッテリー残量レベルの値をセット
textView1.setText(intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) + "%");
}
}
};
}
サンプルコード②(AndroidManifest.xml)
今回はマニフェストファイルにブロードキャストレシーバーを登録する必要はありません。
サンプルコード③(activity_main.xml)
レイアウトファイルは画面の中央に大きめの TextView を配置しただけの単純なものです。
<TextView
android:id="@+id/disp_level"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0%"
android:textSize="100sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
実行結果
① 起動すると画面の中央にテキストが表示されるので、そのままバッテリー充電レベルが変化するのを待つか、エミュレーターであれば、エミュレーターの「拡張コントロール」でバッテリーの充電レベルをマウスで操作します。
② バッテリー充電レベルが増えたり減ったりすると、画面中央のバッテリー残量レベルの数値もそれに合わせて更新されます。
備考・その他
今回のサンプルは「ホームボタン」や「バックボタン」でバックグラウンドに移行しても動作し続けます。バックグラウンドから削除(onDestroy)されると完全に終了します。
END