ホーム > 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();
  }
}
Copyright © 2018   MitoRoid  All Rights Reserved.