安卓四大组件之广播

广播的类型

  • 标准广播
    完全异步执行的广播,所有的广播接收器几乎同时收到该条广播消息,这样广播的效率较高,但是无法被截断
  • 有序广播
    同步执行的广播,同一时刻只能有一个广播接收器收到该消息,当广播接收器处理完成后才会继续传递信息,其中有着优先级的关系,优先级高的先收到广播消息,并且可以被截断。

系统广播

通过接收系统广播,可以得到当前系统的状态信息。比如来短信、电话、电量过低等情况。

广播注册接收

  • 静态注册
    在AndroidManifest.xml文件中注册
    在包名右键–new–other–Broadcast Receiver,新建一个静态的广播接收器文件,在AndroidManifest中会默认生成一些信息,其中,如果设置开机启动这个服务,在AndroidManifest中添加以下代码。

    
            
        
    
    

其中android:name是需要接收的广播名
添加权限:

    
  • 动态注册
    在代码中注册,(有时也需要在AndroidMaifest.xml中使用申请权限的方法)动态注册的广播接收器可以自由的控制注册于撤销,使用灵活,但是必须程序启动后才能收到广播,因为如下的注册过程写在了onCreate函数中

    //初始化过程
    intentFilter = new IntentFilter();
    intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
    networkChangeReceiver = new NetworkChangeReceiver();
    //参数前者是BroadcastReceiver的子类,后者是设置相关广播信息的实例
    registerReceiver(networkChangeReceiver, intentFilter);
    

自定义广播发送

标准广播

其中new Intent中的参数是自己自定义的广播名,如果需要接收该广播,则在相应的AndroidManifest.xml或代码中进行设置广播名。
Intent intent = new Intent(“com.aaa.bbb”);
sendBroadcast(intent);

有序广播

Intent intent = new Intent("com.aaa.bbb");
sendOrderedBroadcast(intent, null);

其中参数后者为权限相关的字符串

  • 设置广播的优先级,AndroidManifest中

    
    
  • 设置截断广播,后面的广播接收器无法接收,在onReceive方法中

    abortBroadcast();
    

本地广播

可以实现本程序内广播的发送与接收,只能代码动态实现,无法静态注册,可以防止数据泄露等。而且更高效。

你可能感兴趣的:(android)