安卓广播简单使用

-广播是跨进程的通信方式,任何应用都可以收到不同程序发出的广播。
接收广播需要进行广播注册,才能接收到对应广播。

动态注册
  • 必须程序启动后才能接受广播
  • 动态注册的广播接收器都要取消注册
//实例化IntentFilter和MyReceiver对象
  IntentFilter intentFilter = new IntentFilter();
  MyReceiver myReceiver = new MyReceiver();  
  
//为IntentFilter添加action,广播接收器才能监听到发出以下值的广播
 intentFilter.addAction("android.intent.action.ACTION_POWER_CONNECTED");  

//注册,传入广播接收器对象和IntentFilter对象
registerReceiver(myReceiver,intentFilter);


//在onDestroy里解除注册
@Override
protected void onDestroy(){
    super.onDestroy();
    unregisterReceiver(myReceiver);
}

  
静态注册
  • 下添加新标签
  • Android Studio快捷创建广播接收器,右键包名->New->Other->Broadcast Receiver

        
            
                

                
            
        
          //表示是否允许接收本程序以外的广播
            
                
//添加相应广播值的action
            

        
    

接收广播

创建广播接收器,定义一个类继承自BroadcastReceiver,并重写父类onReceive()方法,当接收到广播时,就会执行onReceive()方法

  • 广播接收器中不允许开启线程,因为广播接收器生命周期非常短,容易对开启的线程失去控制
  • 不要在onReceive()方法中添加过多逻辑或耗时操作
public class MyReceiver extends BroadcastReceiver{
        @Override
        public void onReceive(Context context, Intent intent) {
                    //实现逻辑
        }
    }

发送自定义广播

1.发送标准广播

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

构建一个Intent对象,将要发送的广播值传入,然后调用sendBroadcast()方法,就可以将此广播发送出去
2.发送有序广播

Intent intent  = new Intent("com.example.MY_BROADCAST");
//传入Intent对象,第二个参数与权限有关的字符串,可传入null
sendOrderedBroadcast(intent,null);
  • 发送有序广播,广播接收器有接收顺序,优先级高的先接收到,并可以阻断其继续传播,在onReceive()方法中调用abortBroadcast()方法,截断这条广播
  • 在AndroidManifest.xml中设置广播接收器的优先级priority

          
      

使用本地广播

本地广播只在应用内部传递,使用本地广播主要使用LocalBroadcastManager对广播进行管理,并提供发送广播和注册广播接收器的方法

//调用getInstance()得到LocalBroadcastManager对象
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this);

//广播接收器对象和IntentFilter对象
MyReceiver myreceiver = new MyReceiver();
IntentFilter intentFilter = new IntentFilter();
  
//添加action
intentFilter.addAction("com.example.MY_BROADCAST");

//注册本地广播监听器
localBroadCastManager.registerReceiver(myReceiver,intentFilter);

//解除注册
localBroadcastManager.unregisterReceiver(myReceiver);

发送本地广播

传入intent对象
localBroadcastManager.sendBroadcast(intent);

你可能感兴趣的:(安卓广播简单使用)