Android学習ノート--ブロードキャスト(Broadcast)

10976 ワード

1、Android放送分類
Androidのブロードキャストタイプは、標準ブロードキャストと秩序ブロードキャストの2種類に分けられます.
標準ブロードキャスト:非同期ブロードキャストで、ブロードキャストが発行されると、登録されたすべてのブロードキャスト受信機が同時にブロードキャストを受信します.例えば、地下鉄の音声放送をしたり、列車員(放送者)が音声放送(放送送信)をしたりすると、すべての乗客(登録して放送を受信するプログラム)が同時に音声を聞くことができ、前後の順序を問わない.Androidシステムには、このようなブロードキャストが起動完了、電力量の変化などがある.
秩序放送:同期送信、放送送信後、登録された放送受信機の優先度順に放送され、優先度の範囲は-1000~1000であり、数字が大きいほど優先度が高くなり、最初にこの放送を受信し、受信機の優先度はandroid:priorityによって設定される.例えば、リレーでは、リレー棒は放送の内容で、選手が順番に伝える必要があります.優先度の高い選手の位置は前で、優先度のある選手の位置は前で、選手のリレーの過程は放送の過程です.もちろん、ある選手が「ああ、このバトンはドアの栓になるのがいい.ポケットに入れて家に帰ったら、後ろの選手は自然にこの放送を受け取ることができない」と思っていたら.Androidシステムの中のメールはこのような形式で放送を行い、私たちの携帯電話にインストールされているXX衛士、XX安全マスターのメールブロック機能は自分がメールを受信する優先度をシステムのメールアプリケーションより高くし、メールをブロックする目的を達成することです.
2、ブロードキャスト受信(BroadcatReceiver)
ブロードキャストを受信する前に、それらのブロードキャストに関心を持つ登録が必要です.登録方法は2種類あり、動的登録と静的登録があります.
2.1動的登録
動的検出とは、プログラムの実行開始後に登録受信を行い、プログラムが起動していない状態で、このブロードキャストを受け付けない、
次に、ネットワーク状態の検出を例に、そのコアコードを実現する
1、放送受信機の実現
/*            BroadcastReceiver*/
class NetworkChangeReceiver extends BroadcastReceiver {
  
    @Override
    public void onReceive(Context context, Intent intent) {
            /*do something*/
    }
}

2、ブロードキャスト受信機の登録
public class MainActivity extends Activity {
private IntentFilter intentFilter;
    private NetworkChangeReceiver networkChangeReceiver; 
 
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        intentFilter = new IntentFilter();
        /*             */
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        networkChangeReceiver = new NetworkChangeReceiver();
        /*     */
        registerReceiver(networkChangeReceiver, intentFilter);
    }
}

3、Android Mainfest.xmlで申請を宣言してネットワークステータス権限を取得
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.broadcasttest"
        android:versionCode="1"
        android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="19" />
     /*            */
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    ...
</manifest>

4、放送受信機のログアウト
public class MainActivity extends Activity {
   …
   @Override
   protected void onDestroy() {
       super.onDestroy();
       unregisterReceiver(networkChangeReceiver);
   }
   …
}

2.2静的登録
静的登録とは、プログラムが実行されていない場合にもブロードキャストを受信し、プログラムを起動することを意味する.
1、放送受信機を実現する(単独でファイルを構築する必要がある)
/*            BroadcastReceiver*/
class NetworkChangeReceiver extends BroadcastReceiver {
  
    @Override
    public void onReceive(Context context, Intent intent) {
            /*do something*/
    }
}

2、Android Mainfest.xmlでのネットワークステータスの取得申請の宣言とブロードキャスト受信機の宣言
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.broadcasttest"
        android:versionCode="1"
        android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="19" />
     /*            */
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    ...
    <application>
    ...
        /*       */
        <receiver android:name=".NetworkChangeReceiver">
            <intent-filter android:priorit="1000">
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
        </receiver>
    ...
    </application>
</manifest>

3、ブロードキャストの送信(sendBroadcast)
3.1標準放送の送信
標準ブロードキャストコードの送信
    Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST");
    intent.putExtra(“XLZH”, “this is a user-defined broadcast!”)
    sendBroadcast(intent);

      com.example.broadcast.MY_BROADCASTはカスタムブロードキャストで、他のアプリケーションがブロードキャストをリスニングする必要がある場合は、動的または静的登録が必要です.
3.1秩序放送の送信
秩序化されたブロードキャストコードの送信
    Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST");
    intent.putExtra(“XLZH”, “this is a user-defined broadcast!”)
    sendOrderedBroadcast(intent);

4、ローカル放送(LocalBroadcast)
ブロードキャストにユーザ付きの機密メッセージがある場合、他のアプリケーションをリスニングしたくない場合は、ローカルブロードキャストを使用して、アプリケーション内でのみブロードキャストおよび受信操作を行うことができます.
1、放送受信機の実現
/*            BroadcastReceiver*/
class LocalBroadcastReceiver extends BroadcastReceiver {
  
    @Override
    public void onReceive(Context context, Intent intent) {
            /*do something*/
    }
}

2、ブロードキャスト受信機の登録
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction("com.example.broadcasttest.LOCAL_BROADCAST");
    LocalBroadcastReceiver localReceiver = new LocalBroadcastReceiver();
    localBroadcastManager.registerReceiver(localReceiver, intentFilter);

3、ローカル放送の送信
    LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this);
    Intent intent = new Intent("com.example.broadcasttest.LOCAL_BROADCAST");
    intent.putExtra("XLZH", "This is a localBroadcast!");
    localBroadcastManager.sendBroadcast(intent);

      com.example.broadcasttest.LOCAL_BROADCASTはカスタムローカルブロードキャストであり、標準ブロードキャストとは異なりLoaclBroadcastManagerのInstance()メソッド取得インスタンスを呼び出し、カスタム登録ブロードキャスト受信機を送信する際にそれぞれ使用するLocalBroadcastManagerのsendBroadcast()メソッドとregisterReceiver()メソッドを送信する必要がある
またローカルブロードキャストは動的登録のみで、静的登録はできません