AndroidのBroadcastReceiverコンポーネント

3562 ワード

1、定義
1つのイベントが発生すると、1つのブロードキャストが送信され、このブロードキャストに登録されたすべての受信者がこのブロードキャストを受信することができ、すなわち、1つのブロードキャストが複数の受信者に受信されることができる
2、放送の受信
    1.インベントリファイルに登録(アンインストールしない限り、永続的に登録)
public class Receiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        Bundle bundle=intent.getExtras();
    }

}
<receiver android:name="com.example.receiver.Receiver">
    <intent-filter android:priority="1000">
        <action android:name="android.intent.action.ACTION_SHUTDOWN"/>
    </intent-filter>
</receiver>

  2.コード登録一時的なブロードキャスト受信者
Activity起動時にブロードキャスト受信者(onCreate()を登録し、Activity終了時にブロードキャスト受信者(onDestroy()をログアウトする)
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    receiver = new Receiver();
    IntentFilter filter=new IntentFilter("com.broadcast.ORDER");
    filter.setPriority(1000);
    registerReceiver(receiver, filter);
}

@Override
protected void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    unregisterReceiver(receiver);
}

3、放送を送る
a、一般放送:受信者間で中断できない(absort)、データの相互転送できない(result)
 
Intent intent=new Intent("com.broadcast.NORMAL");
sendBroadcast(intent,null);

b、秩序放送:受信者の間で中断することができ、データを伝達することができる.
秩序あるブロードキャストを受信する場合、先にパブリッシュされた先受信、優先度の高い先受信
Intent intent=new Intent("com.broadcast.ORDER");
intent.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);//          (3.1       ),     
sendOrderedBroadcast(intent,null);//     ,   null

4、放送送信時にデータを渡す
a、intentはデータを伝達し、このデータは修正できない(再発行が必要)
intentへのデータの追加
intent.putExtra("data","    ");

それぞれのデータを取得
intent.getStringExtra("data");

b、ResultAPIはデータを伝達し、秩序放送はResultAPIを用いてデータを伝達することができる
Bundle bundle=new Bundle();
bundle.putString("name","  ");
bundle.putInt("age",21);
sendOrderedBroadcast(intent,null,null,null,1,"MainActivity",bundle);

それぞれのデータを取得
int code=getResultCode();//      int   
String data=getResultData();//     String   
Bundle bundle=getResultExtras(true);     //      bundle,          bundle  null,      bundle  true      new Bundle(),      ,false     null,       bundle  

結果データの変更
秩序化ブロードキャストでは、受信者はデータを1つに伝達し、チェーン構造であり、後続の受信者は前の修正された数を受信することができる.
bundle.putString("name","  ");
bundle.putInt("age",25);
setResult(6,"Paris",bundle);//  Result  ,                 

5、放送中断(秩序放送で操作可能)
abortBroadcast()はブロードキャストを中断することができ、その後ブロードキャストは受信されません.sendOrderedBroadcast()で3番目のパラメータにResultReceiverを割り当てると、ブロードキャストが受信されます.常に最後の受信です.
6、放送権限
a、送信側は受信側の権限(受信者に権限が必要)を要求する受信側は送信側の権限を持っていなければこのブロードキャスト宣言権限を受信できない---送信側でこの権限使用権限を宣言する---受信側でこの権限を使用してブロードキャストbを受信できる受信側は送信側の権限をラベルにandroid:permission=""権限を指定する必要があります.送信側はこの権限を持っていなければ、受信側はブロードキャストを受信しません.権限がなければ、受信側はブロードキャストを受信しません.
7、ライフサイクル
ブロードキャスト受信時からライフサイクル開始、onReceive()メソッド実行終了、ライフサイクル終了、プロセス中に他のコンポーネントがなければ殺されやすい