ホーム >  Android > ブロードキャストレシーバ

Android -ブロードキャストレシーバ-

ブロードキャストレシーバ

ブロードキャストレシーバの仕組みと役割

ブロードキャストレシーバは、ブロードキャストの通知を受信し、それに対する対応を行う コンポーネントです。

ブロードキャストの多くが元来はシステムコードで、タイムゾーンの変更や充電池の状態の変化、 写真が撮影されたことなどを連絡するために使用されます。

また、アプリケーション間においてもブロードキャストを用いて他のアプリケーションに通知等を行うことができます。

アプリケーションでは、ブロードキャストレシーバを複数設定することができます。

すべてのレシーバは、「BroadcastReceiver」クラスの拡張です。

ブロードキャストレシーバが直接的にユーザインターフェースを表示することはありませんが、受信した情報への応答 としてアクティビティを開始したり、NotificationManager等を使用してユーザにアラートを送信することができます

通知には、バックライトを点滅させる、バイブレーションを起動する、音を鳴らすなど、様々な方法がありますが、通常は、 「NotificationManager」メソッドを使用することが多いです。


ブロードキャストレシーバのライフサイクル

ブロードキャストレシーバのコールバックメソッドは、1つです。

  • void onReceive(Context context, Intent intent)

レシーバにブロードキャストメッセージが届くと「pnReceive」メソッドが呼び出され、メッセージを保持するインテントオブジェクトが 渡されます。

ブロードキャストレシーバがアクティブになっているプロセスは、強制終了しないように保護されます。
しかし、アクティブでないコンポーネントしかないプロセスは、強制終了される可能性があるため、時間のかかる処理は、サービスを 利用します。

インテントをブロードキャストレシーバに配信するには、Contextクラスのsendbroadcast()メソッドを利用します。

ブロードキャストによって、インストール済みのアプリケーション内のすべてのブロードキャストレシーバにインテントが通知されます。

ブロードキャストレシーバのサンプル

broadband

BroadcastReceiverEx

AndroidManifest.xml


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="info.mitosys.broadcastreceiverex"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".BroadcastReceiverEx"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver android:name="TextReceiver" >
            <intent-filter>
                <action android:name="broadcast_test" />
            </intent-filter>

        </receiver>
    </application>

</manifest>

オレンジの部分を追加します。


res/layout/main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/btn"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="ブロードキャストTEST" />

</LinearLayout>

BroadcastReceiverEx.java

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class BroadcastReceiverEx extends Activity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Button btn = (Button) findViewById(R.id.btn);
    btn.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) {
        // Intent生成
        Intent intent = new Intent("broadcast_test");
        // パラメータの設定
        intent.putExtra("TEST""ブロードキャストレシーバのテスト");
        // インテントのブロードキャスト
        sendBroadcast(intent);
      }
    });
  }
}

TextReceiver.java

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;

public class TextReceiver extends BroadcastReceiver {

  // インテントの受信
  @Override
  public void onReceive(Context context, Intent intent) {

    // パラメータ取得
    Bundle bundle = intent.getExtras();
    String text = bundle.getString("TEST");

    // トーストの表示
    Toast.makeText(context, text, Toast.LENGTH_SHORT).show();

  }

}