android广播

广播类型 标准广播  有序广播
标准广播:发出广播后所有接受这同时接受到
有序广播:广播发出后,同一时刻只有一个接受者能够收到广播,优先级高的先接收到,并且前面的接收者能够截断广播
广播是一种跨进程通信方式

广播接收器注册要接收的广播
广播的注册方式有两种 在代码中注册(动态注册) 在AndroidManifest中注册(静态注册)

eg动态注册监听网络变化
public class MainActivity extends Activity{
  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 onDestory(){
    super.onDestory();
    unregisterReceiver(networkChangeReceiver);
  }
  class NetworkChangeReceiver extends BroadcastReceiver{
     @Override
     public void onReceive(Content content,Intent intent){
         Toast.makeText(context,"network changes",Toast.LENGTH_SHOOR).show
     }
  }
}
动态注册的广播必须取消注册才行

静态注册
动态注册的广播接收器可以自由控制注册与取消,在灵活性方面有很大优势,但是他的缺点是必须在程序运行候才能收到广播,静态注册可以做到这点。
eg
public class BootCompleteReceive extends BroadcastReceiver{
  @Override
  public void onReceive(Context context ,Intent intent){
    Toast.makeText(Context,"Boot Complete",Toast.LENGTH_LONG).show();
  }
}
在Androidmanifest注册
<receiver android : name = ".BootCompleteReceiver">
    <intent-filter>
          <action android : name = "android,intent,action,BOOT_COMPLETED"/>
    </intent-filter>
</receiver>

发送标准广播
Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST");
sendBroadcast(intent);

发有序广播
sendOrderdBroadcast(intent,null);
给广播接收器设置优先级
android priority = "100";
截断广播
abortBroadcast();

本地广播
使用LocalBroadcastManager对广播进行管理,并提供发送和注册广播接受器的方法
eg
public class MainActivity extands Activity{
  private IntentFilter intentFilter;
  private LocalReceiver localReceiver;
  private LoalBroadcastManager localBraodcastManager;
  @Override
  protected void onCreate(Bundle saveInstanceState){
    super.onCreate(saveInstanceState);
    setContentView(...);
    localBroadcastManager = LocalBraodcastManager.getInstance(this);

    按钮的初始化部分省略
    Intent intent = new Intent("com.example.broadcasttest.LOCAL_BROADCAST');
    localBroadManager.sendBroadcast(intent);


    intentFilter = new IntentFilrer();
    intentFilter.addAction("...");
    localReceiver = new LocalReceiver();
    localBroadcastManager.registerReceivert(localReceiver,intentFilter);
  }

@Override
protected void onDestory(){
    super.onDestory();
    localBroadcastManager.unregisterReceiver(localReceiver);
 }

class LocalReceiver extends BroadcastReceiver{
  @Override
  public void onReceiver(Context context,Intent intent){
    Toast.makeText(context,"received local broadcast",Toast.LENGTH_SHORT).show();
  }
}
}

注意 本地广播无法通过静态注册的方式来接收

本地广播的优点
1.正在发送的广播不会离开我们的程序,不会泄露信息
2.其他的程序无法将广播送到我们的程序内部,不必担心安全漏洞
2.比全局广播高效

你可能感兴趣的:(android广播)