Android(安卓)广播接收器学习之监听网络变化
广播接收器可以自由地对自己感兴趣的广播进行注册,这样当有相应的广播发出时, 广播接收器就能够收到该广播,并在内部处理相应的逻辑。注册广播的方式一般有两种。
在代码中注册和在AndroidManifest.xml 中注册, 其中前者也被称为动态注册, 后者也被称为静态注册。
我们要怎样监听手机的网络变化呢?
只需要新建一个类, 让它继承自BroadcastReceiver,并重写父类的 onReceive()方法就行了。 这样当有广播到来时, onReceive()方法就会得到执行,具体的逻辑就可以在这个方法中处理
所以我们先新建一个继承与BroadCastReceiver的内部类,
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, "网络打开", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(context, "网络关闭", Toast.LENGTH_SHORT).show(); } } }
可以看到,我们在 MainActivity 中定义了一个内部类 NetworkChangeReceiver,这个类是继承自 BroadcastReceiver 的,并重写了父类的 onReceive()方法。 这样每当网络状态发生变化时,onReceive()方法就会得到执行
然后我们通过 getSystemService()方法得到了 ConnectivityManager 的实例, 这是一个系统服务类, 专门用于管理网络连接的。 然后调用它的 getActiveNetworkInfo()方法可以得到 NetworkInfo 的实例*
接着调用 NetworkInfo 的 isAvailable()方法,就可以判断出当前是否有网络了,最后我们通过 Toast 的方式对用户进行提示。
在MainActivity中我们对这个类进行调用
import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.net.ConnectivityManager;import android.net.NetworkInfo;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.widget.Toast;public class MainActivity extends AppCompatActivity { 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); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(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, "网络打开", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(context, "网络关闭", Toast.LENGTH_SHORT).show(); } } }}
我们通过一个过滤器 接收到 android.net.conn.CONNECTIVITY_CHANGE 的广播
注册这个接收器 这样就能监听网络的变化了,但是我们还是需要在Manifest文件中添加权限,不然就会停止工作*
添加这个权限就能正常工作了
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
更多相关文章
- Android之对反射的应用
- 【Dialog】7种形式的Android(安卓)Dialog举例
- 对于Android日夜间模式实现的探讨
- 高效android编程
- Android平台上四种保存数据的方法
- android ctivity完美退出
- Android自动接听&挂断电话(包含怎么应对4.1以上版本的权限检查)
- Android(安卓)侧滑关闭Activity的实例
- android listView 到上下边界 蓝色或黄色阴影去除方法