Android 广播接收器学习之监听网络变化
2016-07-09 11:46
387 查看
广播接收器可以自由地对自己感兴趣的广播进行注册,这样当有相应的广播发出时, 广播接收器就能够收到该广播,并在内部处理相应的逻辑。注册广播的方式一般有两种。
在代码中注册和在AndroidManifest.xml 中注册, 其中前者也被称为动态注册, 后者也被称为静态注册。
我们要怎样监听手机的网络变化呢?
只需要新建一个类, 让它继承自BroadcastReceiver,并重写父类的 onReceive()方法就行了。 这样当有广播到来时, onReceive()方法就会得到执行,具体的逻辑就可以在这个方法中处理
所以我们先新建一个继承与BroadCastReceiver的内部类,
可以看到,我们在 MainActivity 中定义了一个内部类 NetworkChangeReceiver,这个类是继承自 BroadcastReceiver 的,并重写了父类的 onReceive()方法。 这样每当网络状态发生变化时,onReceive()方法就会得到执行
然后我们通过 getSystemService()方法得到了 ConnectivityManager 的实例, 这是一个系统服务类, 专门用于管理网络连接的。 然后调用它的 getActiveNetworkInfo()方法可以得到 NetworkInfo 的实例*
接着调用 NetworkInfo 的 isAvailable()方法,就可以判断出当前是否有网络了,最后我们通过 Toast 的方式对用户进行提示。
在MainActivity中我们对这个类进行调用
我们通过一个过滤器 接收到 android.net.conn.CONNECTIVITY_CHANGE 的广播
注册这个接收器 这样就能监听网络的变化了,但是我们还是需要在Manifest文件中添加权限,不然就会停止工作*
添加这个权限就能正常工作了
在代码中注册和在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"/>
相关文章推荐
- 用iperf在ambarella s2l上进行网络性能测试
- 多线程+网络
- 网络信息安全学习平台---解密关第9题
- python网络编程
- Linux网络编程--原始套接字
- 一个好玩的问题
- Unix网络编程之细节处理决定成败
- HTTP协议介绍(POST、GET、Content-Type)
- 下列哪些http方法对于服务端和用户端一定是安全的?----腾讯2016研发工程师在线模拟笔试题
- 基本网络编程范式
- 欢迎使用CSDN-markdown编辑器
- HTTP协议详解(真的很经典)
- APP开发流程实例讲解-儒释道网络电台八天开发全程-百度云深度兼容测试并进一步优化排错
- HTTP协议的头信息详解
- HTTP 1.1与HTTP 1.0的比较
- 关于TCP Zero Window Update感知的非常棒的优化
- centos lnmp环境配置ssl证书支持https访问
- 对于block的理解及用法的注意
- 一个小笔记(2):Socket网络编程
- tcp短连接TIME_WAIT问题解决方法大全