Android Broadcast

  1. 广播的发送:通过intent; 广播的接收:通过广播接收者(Broadcast Receiver)
  2. 广播的分类:无序广播和有序广播
    • 无序广播:无法被截断
    • 有序广播:按顺序发送广播,优先级高的先接收到广播,并且可以中断广播的传递,后面的广播接收器将无法接收到广播
  3. 注册广播的两种方式
  • 动态注册:代码中注册
  • 静态注册:清单文件中注册
  1. 动态注册广播
    新建一个类,让它继承BroadcastRecevier,重写onReceive()来接收广播,在activity中通过registerReceiver(receiver,intentFilter)来注册, unregisterReceiver()来反注册,一般在activity的onDestroy()方法中来取消接收广播
  2. 案例1 接收网络状态发生变化时的系统广播
IntentFilter intentFilter = new IntentFilter();    
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(myReceiver,intentFilter);

注意需要在清单文件中声明权限:

  1. 案例2 静态注册开机广播
    权限:
    清单文件中添加以及中指定action
  2. 注意事项:不要在onReceive()方法中添加过多的逻辑或者耗时操作,以免ANR
  3. 发送自定义广播
  • 发送标准广播 sendBroadcast();

Intent intent = new Intent("com.evan.broadcasttest.MY_BROADCAST");
sendBroadcast(intent);

广播发送出去,需要自己写一个广播接收者来接收这个自定义的广播
9. 发送有序广播:sendOrderedBroadcast();这样发送的就是有序广播,在清单文件中的过滤器中设置的权限越大(如android:priority="100"),就优先接收到广播,接收到广播后终止广播:`abortBroadcast();`
10. 本地广播:为了安全性,发出的广播只能在程序内部传递,其他应用程序无法接收到广播,也无法接收到其他程序发送的广播
  - 通过LocalBroadcastManager来发送广播和注册广播接收者

Intent intent = new Intent("com.evan.broadcasttest.MY_BROADCAST");
// sendBroadcast(intent);
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this);
localBroadcastManager.sendBroadcast(intent);

注册广播接收器

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.evan.broadcasttest.MY_BROADCAST");
localBroadcastManager.registerReceiver(myReceiver,intentFilter);

  - 注意:本地广播无法通过静态注册来接收广播

你可能感兴趣的:(Android Broadcast)