概述
实现一个功能,可以有很多种方法,但我们所追求的是最适合于自己项目的那一种方法。
就比如app要判断网络状态,如果在每次使用网络的时候去判断一次网络状态的话,有些耗费时间。例如,你要在打开网页之前先判断网络是否畅通以及在下载图片之前判断网络类型,那么务必造成等待时间的增加。因此,我们可以尝试只需在手机网络状态变更的时候,去记录一下当前的网络状态到我们的app里,在使用网络的地方就无需再去主动检查网络了。
废话不多说,本文主要是借助于android的广播机制BroadcastReceiver来接收系统在网络状态发生改变的时候发出的广播ConnectivityManager.CONNECTIVITY_ACTION即可。
首先、写一个BroadcastReceiver类:
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.net.ConnectivityManager;
- import android.util.Log;
- import android.widget.Toast;
- public class MyReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
- Toast.makeText(context, "myareceiver network changed", Toast.LENGTH_LONG).show();
- Methods.refreshAPNType(context);
- new Thread(new Runnable() {
- @Override
- public void run() {
- //其中Methods为final类,参数netWorkType为当前应用中网络类型的标志
- //此处需要根据项目自己做修改
- Methods.netWorkType = getAPNType(context);
- }
- }).start();
- }
- }
- /**
- * 获取当前的网络状态 :没有网络0:WIFI网络1:3G网络2:2G网络3
- *
- * @param context
- * @return
- */
- private static int getAPNType(Context context) {
- int netType = 0;
- ConnectivityManager connMgr = (ConnectivityManager) context
- .getSystemService(Context.CONNECTIVITY_SERVICE);
- NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
- if (networkInfo == null) {
- return netType;
- }
- int nType = networkInfo.getType();
- if (nType == ConnectivityManager.TYPE_WIFI) {
- netType = 1;// wifi
- } else if (nType == ConnectivityManager.TYPE_MOBILE) {
- int nSubType = networkInfo.getSubtype();
- TelephonyManager mTelephony = (TelephonyManager) context
- .getSystemService(Context.TELEPHONY_SERVICE);
- if (nSubType == TelephonyManager.NETWORK_TYPE_UMTS
- && !mTelephony.isNetworkRoaming()) {
- netType = 2;// 3G
- } else {
- netType = 3;// 2G
- }
- }
- return netType;
- }
- }
其次,在app启动的activity中或AndroidManifest.xml中注册上述的广播接收者即可。
方式一:在activity中注册广播接收者的代码如下:
- IntentFilter mFilter = new IntentFilter();
- mFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
- MyReceiver mReceiver = new MyReceiver();
- registerReceiver(mReceiver, mFilter);
方式二:通过配置文件来进行静态注册:
- <receiver
- android:name="com.xxx.MyReceiver"
- android:label="NetworkConnection" >
- <intent-filter>
- <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
- </intent-filter>
- </receiver>
至此,一个完整的网络监听功能写完啦。
转自http://blog.csdn.net/wanggsx918/article/details/42918343
最后
以上就是欢喜河马为你收集整理的【android】解决方案--用BroadcastReceiver监听手机网络状态变化的全部内容,希望文章能够帮你解决【android】解决方案--用BroadcastReceiver监听手机网络状态变化所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复