美文网首页Android 开发
Android 入门(6)-广播详解与实战

Android 入门(6)-广播详解与实战

作者: 正经龙 | 来源:发表于2018-09-04 17:26 被阅读0次

    广播

    一听见这个名字就能想到,小的时候走街串巷的大喇叭,学校里做操上课的铃声,一个个大喇叭中传播着我们的青春,广播从小就深入人心。Android广播也不例外,当你的一个活动在行进过程中,需要告诉别的活动一个比较重要的信息,例如你在登陆简书网app的时候需要用到qq,那么通知qq的这个过程其实也是广播,你的后台清理程序一件关闭所有后台程序其实也是广播,广播在Android中非常常用,所以,我们有必要掌握这种实用又方便的工具。

    广播分为标准广播有序广播

    标准广播

    广播接收器同时收到广播


    标准广播

    有序广播

    广播按顺序传递,任意节点可截断广播的传递


    有序广播

    广播的实现

    广播的实现又两种方式,一种是动态创建广播接收器,一种是静态写入广播接收器,第二种开机启动,第一种静态创建

    现在通过一个小的项目来进行一下讲解

    1.动态创建广播接收器

    首先创建一个新的项目,命名为BoardCast_1,其他全部默认。
    这个小项目需要实现的功能是实现一个广播接收器,能够监测到网络的连接状态。

    首先进入到MainActivity.java 文件中,我们需要动态注册一个广播接收类,用于接收我们的网络状态广播。首先实现内部类NetworkChangeReceiver

    class NetWorkChangeReceiver extends BroadcastReceiver{
            @Override
            public void onReceive(Context context, Intent intent) {
                ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
                if(networkInfo!=null&&networkInfo.isAvailable()){
                    Toast.makeText(context,"network is avaliable",Toast.LENGTH_SHORT).show();
                }
                else{
                    Toast.makeText(context,"network is unavailable",Toast.LENGTH_SHORT).show();
                }
            }
        }
    

    广播接收类就实现了一个功能,那就是当网络发生变化的时候弹出信息,提示我们网络状态发生变化即可。
    这里我们使用了ConnectivityManager监测当前网络状况
    接下来我们需要创建一个广播管理者,让广播管理者与我们的广播实例绑定起来,并且在活动销毁的时候结束绑定。这些我们依然是在MainActivity类中实现。
    我们在OnCreate中实现绑定,在OnDestory中实现解绑

    IntentFilter intentFilter;
        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 onDestroy() {
            super.onDestroy();
            unregisterReceiver(netWorkChangeReceiver);
        }
    

    android.net.conn.CONNECTIVITY_CHANGE是系统自带的网络变化事件

    点击运行,按home键退出,当我们在设置中开启飞行模式的时候能够看到提示,打开的时候也可以看到提示,即我们第一个小项目完成。


    关闭网络 打开网络

    静态创建广播接收器

    静态创建广播接收器,通过IDE创建独立的广播接收器,在属性页上设置对应的权限与声明,即可实现静态创建。

    1右键包,创建新的Receiver

    创建新的Receiver

    创建名为BootCompleteReceiver的广播接收器


    广播接收器

    然后实现OnReceive函数

        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO: This method is called when the BroadcastReceiver is receiving
            // an Intent broadcast.
            Toast.makeText(context,"you open the mobile phone",Toast.LENGTH_SHORT).show();
        }
    

    最后打开AndroidMainifest.xml文件进行权限许可与广播接收的类型声明

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    监听开机广播权限声明
    -----------------------
            <receiver
                android:name=".BootCompleteReceiver"
                android:enabled="true"
                android:exported="true">
                <intent-filter>监听开机广播
                    <action android:name="android.intent.action.BOOT_COMPLETED"/>
                </intent-filter>
            </receiver>
    

    这样当下次开机的时候就会显示信息“you open the mobile phone”

    发送广播

    发送广播同样又两种形式,发送标准广播与发送有序广播,发送标准广播的函数为sendBroadcast(Intent intent),发送有序广播的函数为sendOrderBroadcast(Intent intent,权限控制(可以为null))

    上部分我们知道了可以在AndroidMainifest.xml中给接收器声明接收的广播类型,我们在有序广播中的OnReceive中调用abortBroadcast就可以实现截断广播。

    发送本地广播

    在一般的动态广播接收器中,申明一个新的类型LocalBroadcastManager,通过这个类型管理绑定本地广播与本地接收器,广播就不会被非本程序的程序恶意监听

    声明
        LocalBroadcastManager localBroadcastManager;
    新建
      localBroadcastManager = new LocalBroadcastManager.getInstence(this);
    绑定
      localBroadcastManager.registerReceiver(localReceiver,intentFilter);
    解绑
    localBroadcastManager.unregisterReceiver(localReceiver)
    

    相关文章

      网友评论

        本文标题:Android 入门(6)-广播详解与实战

        本文链接:https://www.haomeiwen.com/subject/mmfnwftx.html