天天看點

Android基礎複習之廣播(Broadcast)

Android廣播知識複習

  • 作者:朱紅喜

1.廣播分類

  • 按通信方式分類
    • 标準廣播 (normal broadcast)
    • 有序廣播 (ordered broadcast)
  • 按廣播區域分類
    • 全局廣播
    • 本地廣播(LocalBrodcast)
  1. 标準廣播:完全異步的廣播,廣播發出後每一個廣播接收器都會同一時刻接收到這條廣播資訊,無法被攔截。
  2. 有序廣播:一種同步的廣播,同一時刻隻能由一個接收器能夠接收到這條廣播,接收器有順序優先級,廣播可以截斷
  3. 全局廣播:所有的應用都可以收到的廣播
  4. 本地廣播:隻能夠被本應用内的接收器接收到

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);
...

           

6.不要濫用廣播