BroadCast 是一種溝通的方法,可以用在CallBack回傳,透過此方法可以在收到回傳值時發出廣播,讓接收廣播者做出對應的動作,主要分成註冊、接收。
public class Utilities {
//廣播事件(發送)
public static final String SEND_BROADCAST="SEND_BROADCAST";
}
protected void onResume() {
super.onResume();
final IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Utilities.SEND_BROADCAST);
}
這個步驟將需要或可能會發送的廣播先行註冊(addAction()),不註冊的話接收這就不知道這項廣播是甚麼,就算有寫接收也沒辦法成功收到對應的廣播喔!
private class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
switch (intent.getAction()){
case Utilities.SEND_BROADCAST:
//接收到廣播時的行為
}
}
}
透過intent.getAction()獲取此次接受到廣播的行為為何,並根據Action決定對應的行為,也可以接收廣播時傳的data。
4. 宣告Receiver
private final MyReceiver myReceiver = new MyReceiver();
protected void onResume() {
super.onResume();
...
//註冊廣播(Receiver,intentFilter),包含Receiver和addAction()過的intentFilter
LocalBroadcastManager.getInstance(this).registerReceiver(myReceiver,intentFilter);
}
經過此步驟才是真正的完成註冊喔~!
6. 發送廣播
send_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
//設定Action
intent.setAction(Utilities.SEND_BROADCAST);
//傳送Data
intent.putExtra("message","廣播發送完成");
LocalBroadcastManager.getInstance(mContext).sendBroadcast(intent);
}
});
private class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
switch (intent.getAction()){
case Utilities.SEND_BROADCAST:
//接收到廣播時的行為
String result = intent.getStringExtra("message");
result_txt.setText(result);
break;
}
}
}
在intent中加入此次行為的Action為何,好讓Receiver依照此Action判斷並做出對應的行為喔。
7. 解除註冊
@Override
protected void onStop() {
super.onStop();
//解除註冊
LocalBroadcastManager.getInstance(this).unregisterReceiver(myReceiver);
}
再不需要接收廣播時,記得解除,才可以避免收到不該收的廣播以及資源的浪費喔。
以上步驟,如果有漏都可能造成廣播的失敗,不論是發送或是接收,尤其是新增addAction(),在我使用的時候常常被我遺忘,所以各位如果需要使用廣播的話,可以在每次新增新的Action時,依照這個順序檢查一遍才不會,明明註冊了卻莫名其妙的接不到廣播喔。