1.动态注册广播
修改MainActivity中的代码
public class MainActivity extends AppCompatActivity {
private IntentFilter intentFilter;
private NetworkChangeReceiver networkChangeReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
networkChangeReceiver = new NetworkChangeReceiver();
registerReceiver(networkChangeReceiver, intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(networkChangeReceiver);
}
class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "network changes", Toast.LENGTH_SHORT).show();
}
}
}
动态广播一般在onCreate()中注册广播接收器,在onDestroy()中注销广播接收器。
registerReceiver(BroadcastReceiver receiver, IntentFilter filter)
unregisterReceiver(BroadcastReceiver receiver)
2.静态注册广播
静态的广播接收器一定要在AndroidManifest.xml文件中注册才可以使用,
在 AndroidManifest.xml文件 的Application标签中加入以下代码:
<receiver
android:name=".BootCompleteReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
3.发送自定义广播
1 发送标准广播
Intent intent = new Intent(“com.example.broadcasttest.MY_BROADCAST”);
sendBroadcast(intent);
2 发送有序广播
Intent intent = new Intent(“com.example.broadcasttest.MY_BROADCAST”);
sendOrderedBroadcast(intent);
4.有序广播
有序广播的广播接收器是有先后顺序的,而且前面的广播接收器还可以将广播截断,以阻止其继续传播。
1.设定广播接收器的先后顺序
设置intent-filter标签的android:priority属性
<receiver
android:name=".MyBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="100">
<action android:name="com.example.broadcasttest.MY_BROADCAST" />
</intent-filter>
</receiver>
2.广播接收器截断广播
调用abortBroadcast()方法即可截断广播,以阻止其继续传播,那么比此广播接收器优先级低的其他广播接收器将无法收到这个广播。
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "received in MyBroadcastReceiver",
Toast.LENGTH_SHORT).show();
abortBroadcast();
}
}
5.本地广播
前面我们发送和接收的广播全部属于系统全局广播,即发出的广播可以被其他任何应用程序接
收到,并且我们也可以接收来自于其他任何应用程序的广播。这样就很容易引起安全性的问
题,比如说我们发送的一些携带关键性数据的广播有可能被其他的应用程序截获,或者其他的
程序不停地向我们的广播接收器里发送各种垃圾广播。
LocalBroadcastManager提供了以下实例方法:
LocalBroadcastManager.sendBroadcast(Intent)
LocalBroadcastManager.registerReceiver(BroadcastReceiver, IntentFilter);
LocalBroadcastManager.unregisterReceiver(BroadcastReceiver);
实现本地广播:使用LocalBroadcastManager类提供的发送广播和注册广播接收器的方法即可。