详解广播机制,Broadcast Receiver,Android进阶必备知识。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了详解广播机制,Broadcast Receiver,Android进阶必备知识。相关的知识,希望对你有一定的参考价值。

  直奔主题,关于广播的一些定义什么的我觉得只要是一名合格的初级android开发这都知道吧,我下面要做的就是怎么去使用broadcast receiver。

  1.怎么去监听系统广播?

  Android系统有很多内置的系统广播:电话,短信,时间,地区,电池电量,网络变化等等。。。那么我们怎么去在我们的应用中实现监听呢?下面我们以监听手机网络发生改变的广播进行监听,都知道广播有两种注册方式,在这里我使用的代码注册的方式,为的是能更好的去理解广播运行机制。在代码中注册一定要注意在你使用完毕的时候一定要反注册掉,一定要反注册掉,一定要反注册掉。下面看代码:

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);
    }

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

        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(netWorkChangeReceiver);
    }
}

在这里我实现了对网络的监听,监听当前的网络是否可用。Android系统为了保证程序的安全性规定查询网络状态必须需要权限,所以我在清单文件中注册了权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>

这个程序你可以拷贝下来去跑跑。

  2.静态注册?

  上面用到的是动态注册,主要是为了让我们能更加清晰的去了解广播机制的运行。但是不可否认的是静态注册的方便性。动态注册可以让我们去很好的管理广播的注册和注销,非常灵活但是有一个致命的缺点就是必须在应用启动之后,我们这个广播接收器才可以使用。静态注册恰恰弥补了这一点,在你不启动程序的情况下,就可以去监听相关广播(这也是为什么很多恶意软件都是使用这种方式来坑你,但是你要知道,没有哪款应用会在你一次也没有启动过的情况下去启动它本身的运行机制。说简单一点就是,如果你下来了一个病毒,但是你一次也没有打开运行过,那么它对你是不会产生危害的)。下面依然用例子说话:

  下面实现监听开机广播的程序,不能忘权限问题,先在清单中加权限:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>

  下面创建我们的接收器:

public class BootCompleteReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context,"启动成功",Toast.LENGTH_SHORT).show();
    }
}

在这里代码就很简单了,只需要做我们的逻辑处理就好了,主要就是在清单文件中的注册

<receiver android:name=".BootCompleteReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

好了 ,相信你看了这两个例子已经明白了广播的运行机制了,在例子中我们只是弹出了几个toast,你可以在里面做你自己的逻辑运算。

知道广播的定义,说明你在入门。

当你看懂这两个例子并且可以熟练运用之后你就是初阶了,如果你把后面那篇文章也能吃透的话,就是算是迈向中阶的第一步了。

  



以上是关于详解广播机制,Broadcast Receiver,Android进阶必备知识。的主要内容,如果未能解决你的问题,请参考以下文章

详解广播机制,Broadcast Receiver,Android进阶必备知识。(附使用广播实现一键强制下线功能)

Android面试收集录2 Broadcast Receiver详解

Android Broadcast Receiver (广播接收者)

品茗论道说广播(Broadcast内部机制讲解)(下)

Android中Intent具体解释之使用Intent广播事件及Broadcast Receiver简单介绍

广播——broadcast