Android廣播知識複習
- 作者:朱紅喜
1.廣播分類
- 按通信方式分類
- 标準廣播 (normal broadcast)
- 有序廣播 (ordered broadcast)
- 按廣播區域分類
- 全局廣播
- 本地廣播(LocalBrodcast)
- 标準廣播:完全異步的廣播,廣播發出後每一個廣播接收器都會同一時刻接收到這條廣播資訊,無法被攔截。
- 有序廣播:一種同步的廣播,同一時刻隻能由一個接收器能夠接收到這條廣播,接收器有順序優先級,廣播可以截斷
- 全局廣播:所有的應用都可以收到的廣播
- 本地廣播:隻能夠被本應用内的接收器接收到
2.動态注冊廣播接收器
private IntentFilter intentFilter;
private CustomReceiver mReceiver;
@Override
protected void onCreate(Bundle saveInstanceState){
super.onCreate(saveInstanceState);
setContentView(R.layout.activity_main);
intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
mReceiver= new CustomReceiver();
registerReceiver(mReceiver,intentFilter);
}
@Override
protected void onDestroy(){
super.onDestroy();
unregisterReceiver(mReceiver);
}
class CustomReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context,Intent intent){
//你的邏輯代碼
}
}
3.靜态注冊廣播(manifest檔案中)
<receiver
android:name=".CustomReceiver"
android:enabled="true" 啟用這個廣播
android:exported="true"> 是否允許接收本程式外的廣播
<intent-filter>
<action android:name="你需要的action"/>
</intent-filter>
</receiver>
4.發送廣播
- 發送标準廣播
Intent intent = new Intent("你的廣播的action")
sendBroadcast(intent);
- 發送有序廣播
Intent intent = new Intent("你的廣播的action")
sendOrderedBroadcast(intent);
5.使用本地廣播
private IntentFilter intentFilter;
private CustomReceiver mReceiver;
private LocalBroadcastManager localBroadcastManager
@Override
protected void onCreate(Bundle saveInstanceState){
super.onCreate(saveInstanceState);
setContentView(R.layout.activity_main);
localBroadcastManager = LocalBroadcastManager.getInstance(this);
intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
mReceiver= new CustomReceiver();
localBroadcastManager.registerReceiver(mReceiver,intentFilter);
}
@Override
protected void onDestroy(){
super.onDestroy();
localBroadcastManager.unregisterReceiver(mReceiver);
}
class CustomReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context,Intent intent){
//你的邏輯代碼
}
}
發送廣播
private LocalBroadcastManager localBroadcastManager
...
Intent intent = new Intent("你的廣播的action")
localBroadcastManager.sendBroadcast(intent);
...