广播接收器可以接收广播,分为动态注册(代码实现)和静态注册(AndroidManifest中注册)
动态注册示例代码:
public class Main2Activity extends AppCompatActivity {
private IntentFilter intentFilter;
private BroadcastReceiver broadcastReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
intentFilter=new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
broadcastReceiver=new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectivityManager= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo=connectivityManager.getActiveNetworkInfo();
if (networkInfo!=null&&networkInfo.isAvailable()){
System.out.println("network is available");
}else {
System.out.println("network is unavailable");
}
}
};
registerReceiver(broadcastReceiver,intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(broadcastReceiver);
}
}
AndroidManifest中静态注册
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
广播不允许开启线程,所以不要在receive()中写耗时的操作,通常广播接收器接收到广播之后打开程序的其他组件
广播分为标准广播和有序广播
标准广播:异步执行的广播,可以被其他广播接收器同时接收,效率高
有序广播:同步执行的广播,同一时间只能有一个广播器可以接收,优先级高的广播接收器先收到消息,可以拦截
发送标准广播:
Intent intent=new Intent("com.example.administrator.layouttest002.Test");
sendBroadcast(intent);
发送有序广播:
Intent intent=new Intent("com.example.administrator.layouttest002.Test");
sendOrderedBroadcast(intent,null);
有序广播截断
abortBroadcase();
本地广播
LocalBroadcastManager用这个类发送广播,注册广播接收器
(具体代码就不放了,和广播同理)
广播可以用在BaseActivity类中实现任何activity的强制下线功能