在Android平台上开发基于网络的应用,必然需要去判断当前的网络连接情况。对于当前网络情况的判断,有不同的判断。

先看一个自己定义的应用类。

public class NetworkDetector {         public static boolean detect(Activity act) {                 ConnectivityManager manager = (ConnectivityManager) act                .getApplicationContext().getSystemService(                       Context.CONNECTIVITY_SERVICE);                 if (manager == null) {             return false;         }                 NetworkInfo networkinfo = manager.getActiveNetworkInfo();                 if (networkinfo == null || !networkinfo.isAvailable()) {             return false;         }            return true;      }  }  

这个类只有一个静态方法,用来检测当前系统的网络是否可用。如果可用,返回true。

还要进一步说明的是,NetworkInfo类中有一个方法getType(),这个方法可以用来判断当前可用的网络是wifi,还是mobile等等。

再来看使用的例子。

boolean networkState = NetworkDetector.detect(XXXActivity.this);  if (!networkState) {      DialogUtil.openMsgDialog(XXXActivity.this,             android.R.drawable.ic_dialog_info,             “网络不可用,是否现在设置网络?”, android.R.string.ok,             android.R.string.cancel,             new DialogInterface.OnClickListener() {                @Override                public void onClick(DialogInterface dialog, int which) {                    startActivityForResult(new Intent(                           ACTION_WIRELESS_SETTINGS), 0);                }             }, new DialogInterface.OnClickListener() {                @Override                public void onClick(DialogInterface dialog, int which) {                    dialog.cancel();                }             }).show();  }  

其中XXXActivity是我自己的Activity类,DialogUtil是我自己定义的Dialog应用类。这里的代码片段,是在判断没有网络的情况下,弹出dialog,提示用户是否进入系统的网络设置界面。

因为以上代码用到了权限,需要在AndroidManifest文件中加入如下权限代码:

<uses-permission

android:name="android.permission.ACCESS_NETWORK_STATE"/>

实现的网络infor类:

import android.content.Context;import android.net.ConnectivityManager;import android.net.NetworkInfo;public class ConnectionDetetor {private Context mContext;      public ConnectionDetetor(Context context){        this.mContext = context;    }      public boolean isConnectingToInternet(){        ConnectivityManager connectivity = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE);          if (connectivity != null)          {              NetworkInfo[] info = connectivity.getAllNetworkInfo();              if (info != null)                  for (int i = 0; i < info.length; i++)                      if (info[i].getState() == NetworkInfo.State.CONNECTED)                      {                          return true;                      }            }          return false;    }            public boolean isConnecting(){     ConnectivityManager connectivity = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE);     if(connectivity!= null){     NetworkInfo[] info = connectivity.getAllNetworkInfo();     for(NetworkInfo in:info){     if(in.getState()== NetworkInfo.State.CONNECTED){     return true;     }     }         }     return false;    }}



更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. Nginx系列教程(六)| 手把手教你搭建 LNMP 架构并部署天空网络电影
  3. 2010.05.15学习日志
  4. Android中解析XML的方法
  5. Android7.0 禁止锁屏状态的下拉状态栏
  6. Parcelable接口的使用(跨进程,Intent传输)
  7. Android(安卓)View 绘制流程之四:绘制流程触发机制
  8. Android(安卓)SDK 更新时连接出现“https://dl-ssl.google.com r
  9. Android(安卓)aidl学习笔记-服务端

随机推荐

  1. Android(安卓)AsyncTask两种线程池分析和
  2. Android(安卓)6.0+ 运行时权限探索
  3. Android(安卓)音视频开发(三) -- Camera2
  4. android handlerThread 的使用
  5. windows 下 android 自动化测试环境搭建(a
  6. Android(安卓)studio 异常记录
  7. Android技术积累:图片异步加载
  8. Android集成融云IM踩坑记录
  9. Android(安卓)帧动画 补间动画 属性动画
  10. android在ubuntu桌面系统下编译可能的错