AndroidのBroadcastReceiverコンポーネント
3562 ワード
1、定義
1つのイベントが発生すると、1つのブロードキャストが送信され、このブロードキャストに登録されたすべての受信者がこのブロードキャストを受信することができ、すなわち、1つのブロードキャストが複数の受信者に受信されることができる
2、放送の受信
1.インベントリファイルに登録(アンインストールしない限り、永続的に登録)
2.コード登録一時的なブロードキャスト受信者
Activity起動時にブロードキャスト受信者(onCreate()を登録し、Activity終了時にブロードキャスト受信者(onDestroy()をログアウトする)
3、放送を送る
a、一般放送:受信者間で中断できない(absort)、データの相互転送できない(result)
b、秩序放送:受信者の間で中断することができ、データを伝達することができる.
秩序あるブロードキャストを受信する場合、先にパブリッシュされた先受信、優先度の高い先受信
4、放送送信時にデータを渡す
a、intentはデータを伝達し、このデータは修正できない(再発行が必要)
intentへのデータの追加
それぞれのデータを取得
b、ResultAPIはデータを伝達し、秩序放送はResultAPIを用いてデータを伝達することができる
それぞれのデータを取得
結果データの変更
秩序化ブロードキャストでは、受信者はデータを1つに伝達し、チェーン構造であり、後続の受信者は前の修正された数を受信することができる.
5、放送中断(秩序放送で操作可能)
abortBroadcast()はブロードキャストを中断することができ、その後ブロードキャストは受信されません.sendOrderedBroadcast()で3番目のパラメータにResultReceiverを割り当てると、ブロードキャストが受信されます.常に最後の受信です.
6、放送権限
a、送信側は受信側の権限(受信者に権限が必要)を要求する受信側は送信側の権限を持っていなければこのブロードキャスト宣言権限を受信できない---送信側でこの権限使用権限を宣言する---受信側でこの権限を使用してブロードキャストbを受信できる受信側は送信側の権限をラベルにandroid:permission=""権限を指定する必要があります.送信側はこの権限を持っていなければ、受信側はブロードキャストを受信しません.権限がなければ、受信側はブロードキャストを受信しません.
7、ライフサイクル
ブロードキャスト受信時からライフサイクル開始、onReceive()メソッド実行終了、ライフサイクル終了、プロセス中に他のコンポーネントがなければ殺されやすい
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、送信側は受信側の権限(受信者に権限が必要)を要求する受信側は送信側の権限を持っていなければこのブロードキャスト
7、ライフサイクル
ブロードキャスト受信時からライフサイクル開始、onReceive()メソッド実行終了、ライフサイクル終了、プロセス中に他のコンポーネントがなければ殺されやすい