Android でのアプリ間ブロードキャスト受信

これは Android の四大コンポーネントの一つであるブロードキャストレシーバー(BroadcastReceiver)を使ったアプリ間通信のサンプルです。2 つの独立したプロジェクトでApp1 がカスタムブロードキャストを送信し、App2 がそれを受信する仕組みを紹介します。

1. コアコンセプト

Android のブロードキャストはシステムレベルのメッセージ配信/購読メカニズムです:

  1. ブロードキャストはアプリケーション間で送受信できます。また、カスタムブロードキャストだけでなく、システムブロードキャスト(起動完了、バッテリー変化、画面ロックなど)も受信可能です。
  2. テスト方法:2 つの独立した Android プロジェクトを新規作成
    • SendDemo:カスタムブロードキャストを送信するアプリ(送信側)
    • SendDemo2:ブロードキャストを受信するアプリ(受信側。スクリーンショット内のプロジェクト)

2. 受信側のコード(SendDemo2)

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

public class MyBroadCastService extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // ブロードキャスト受信時にコールバックされ、Toast を表示
        Toast.makeText(context, "カスタムブロードキャスト22222を受信しました", Toast.LENGTH_LONG).show();
    }
}
Code language: JavaScript (javascript)
  • BroadcastReceiver を継承し、onReceive() をオーバーライドする必要があります。ブロードキャストを受信するとこのメソッドが自動的に実行されます。
  • 注意:onReceive では時間のかかる処理は行わないでください。ブロードキャストのライフサイクルは非常に短いためです。

3. ブロードキャストレシーバーの登録(2 つの方法)

方法 1:静的登録(AndroidManifest.xml に登録。アプリが起動していなくても受信可能。ただし Android 8.0 以降は制限あり)
<receiver android:name=".MyBroadCastService">
    <intent-filter>
        <!-- アクション識別子。送信側は全く同じ action 文字列を使用する必要があります -->
        <action android:name="com.foxdevelop.MY_CUSTOM_BROADCAST"/>
    </intent-filter>
</receiver>
Code language: HTML, XML (xml)

送信側 SendDemo がブロードキャストを送信する際、Intent の action には必ず com.foxdevelop.MY_CUSTOM_BROADCAST を指定する必要があります。両方の action が一致して初めて受信できます。

方法 2:動的登録(コード内で登録。アプリが実行中の場合のみ受信可能)
MyBroadCastService receiver = new MyBroadCastService();
IntentFilter filter = new IntentFilter("com.foxdevelop.MY_CUSTOM_BROADCAST");
registerReceiver(receiver, filter);
Code language: JavaScript (javascript)

4. 送信側 SendDemo のブロードキャスト送信コード

// カスタムのアプリ間ブロードキャストを送信
Intent intent = new Intent("com.foxdevelop.MY_CUSTOM_BROADCAST");
sendBroadcast(intent);
Code language: JavaScript (javascript)

5. 注意点

  1. Android 8.0 (API 26) 以降:静的登録されたカスタムの暗黙的ブロードキャストは制限されます。多くのカスタム action は静的登録では受信できなくなります。
    • 解決策:① 動的登録を使用する;② ブロードキャスト送信時にパッケージ名を指定し、明示的 Intent を使用する。
  2. システムブロードキャスト(ネットワーク変更、バッテリーなど)のほとんどは引き続き正常に受信できますが、一部のシステムブロードキャストにも制限があります。
  3. アプリ間ブロードキャストにはセキュリティリスクがあるため、権限を設定して送受信を制御することができます。

6. 実行フロー

  1. SendDemo(送信側)と SendDemo2(受信側)の 2 つのアプリを同じ端末/エミュレーターにインストールします。
  2. SendDemo でボタンをタップし、sendBroadcast を呼び出して action が com.foxdevelop.MY_CUSTOM_BROADCAST のブロードキャストを送信します。
  3. システムがブロードキャストを配信し、その action に登録されているすべての BroadcastReceiver(SendDemo2 内の MyBroadCastService)の onReceive がトリガーされます。
  4. SendDemo2 に Toast が表示されます:カスタムブロードキャスト22222を受信しました

Android でのアプリ間ブロードキャスト受信

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です