ブロードキャストレシーバーの使い方(その2)
ブロードキャストレシーバーは端末が発信している様々なメッセージや情報を受信するクラスです。これを利用すると、時間やタイムゾーンの変化、バッテリーの残量や充電状態など、細かな端末の状態を知ることができます。また、自作の情報を発信してそれを受信することも可能です。
前回は自作のインテントを受信しましたが、今回は端末自らが発信(ブロードキャスト)しているインテント情報を受信する方法を説明したいと思います。
サンプルコード①(MainActivity.java)
今回はブロードキャストレシーバーに関するコードを別ファイルに記述するのではなく MainActivity.java に記述します。サンプルコードの詳しい説明はコード内のコメントを参照してください。
public class MainActivity extends Activity {
//オブジェクト・変数の準備
private static TextView textView1;
private static int kaisu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Viewにレイアウトファイルをセットして使用する
setContentView(R.layout.activity_main2);
//レイアウトファイルのTextViewを取得
textView1 = (TextView)findViewById(R.id.textView);
//変数kaisuに0をセット
kaisu = 0;
//インテントフィルターを準備
IntentFilter intentFilter1 = new IntentFilter();
//現在時刻が変更された(分単位)
intentFilter1.addAction(Intent.ACTION_TIME_TICK);
//レシーバーを登録
registerReceiver(mbroadcastReceiver, intentFilter1);
//TextViewの更新メソッドを実行
koushin();
}
//TextView更新メソッド
public static void koushin() {
//TextViewの更新
textView1.setText("受信回数:" + kaisu + "回");
}
///////////////////////////////////////////////////////////////////////////////
////////////ブロードキャストレシーバー部///////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
private static BroadcastReceiver mbroadcastReceiver = new BroadcastReceiver() {
//受信した時に呼び出されるメソッド
@Override
public void onReceive(Context context, Intent intent) {
//受信回数+1
kaisu += 1;
//更新メソッドを呼び出す
koushin();
}
};
}
サンプルコード②(AndroidManifest.xml)
「ブロードキャストレシーバーの基本的な使い方(その1)」ではマニフェストファイルにブロードキャストレシーバーを登録しましたが、今回は登録する必要がありません。
<注意点>
今回の使い方で受信できるのは端末が自ら発信しているブロードキャストのみで、自作のインテントを受信することができません。自作のインテントを受信するには、マニフェストファイルに登録する「ブロードキャストレシーバーの基本的な使い方(その1)」を参考にしてください。
サンプルコード③(activity_main.xml)
レイアウトファイルは画面の中央に大きめの TextView を配置しただけの簡単なものです。
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:text="TextView"
android:textSize="36sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
実行結果
① 起動すると画面の中央にテキストが表示されるので、現在時刻の変更のブロードキャストがあるまでそのまま待ちます。
② 現在時刻が変更(1分間隔)されるたびにブロードキャストレシーバーがそれを受信して「受信回数」がひとつずつ加算されていきます。
備考・その他
ブロードキャストレシーバーで受信できる端末情報の種類はとても多いのですが、知っていると非常に便利なので一度目を通しておいた方が良いと思います。
<Android Developers|Intent> Intent | Android Developers
END