安卓广播简单使用

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

动态注册
  • 必须程序启动后才能接受广播
  • 动态注册的广播接收器都要取消注册
//实例化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);
}

  
静态注册
  • <application>下添加新标签<receiver>
  • Android Studio快捷创建广播接收器,右键包名->New->Other->Broadcast Receiver
<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name=".MyReceiver"  //广播接收器名
            android:enabled="true"      //表示是否启用此广播接收器
            android:exported="true">  //表示是否允许接收本程序以外的广播
            <intent-filter>
                <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
//添加相应广播值的action
            </intent-filter>

        </receiver>
    </application>

接收广播

创建广播接收器,定义一个类继承自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
<receiver
       .......
      <intent - filter android:priority="100">
          <action ........................../>
      </intent - filter>
</receiver>

使用本地广播

本地广播只在应用内部传递,使用本地广播主要使用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);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 【Android 广播】 BroadcastReceiver简介 BroadcastReceiver(广播接收器)...
    Rtia阅读 3,446评论 1 17
  • 广播接收器 是Android的四大组件之一,可见广播在Android中的重要性; 1. 什么是广播? 广播(Bro...
    Lost_Robot阅读 1,970评论 2 10
  • 1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,Broadca...
    IT小魔女的故事阅读 564评论 0 2
  • 四原色 1、首先我们了解一下3/66、6/11、9/11、0/33、0/00 2、我做所有色彩一定要...
    启帆彭羽阅读 5,146评论 0 2
  • 因为从小在外婆和6个姨妈的陪伴下长大,我一直愿意和同性在一起玩,男性世界对我来说挺陌生,直至成年,嫁人,依然对男人...
    山果2016阅读 143评论 2 0