Android WIFI与网络连接处理(一)

1,149 阅读3分钟

「这是我参与11月更文挑战的第22天,活动详情查看:2021最后一次更文挑战

一、网络连接处理

在说WiFi之前,先来说说网络连接处理。 在Android开发过程中,对于一个需要连接网络的Android设备,对设备的网络状态检测是很有必要的!有很多的App都需要连接网络。判断设备是否已经连接网络,并且在连接网络的状态下判断是wifi无线连接还是GPRS手机网络连接,这样就可以在不同的网络连接下去调用不同的方法,处理不同的事情。

现在app大多都需要从网络上获得数据。所以访问网络是在所难免。但是在访问网络之前,我们应该先做一下网络的状态判断。其实在访问网络之前我们要做一些状态判断,对应一些状态判断来做处理,并不是直接使用Http访问网络即可。很多人在开发就经常把网络这块直接跳过,直接访问网络,一旦断网,各种体验效果不好,不是说app没法用,只是体验效果差。还有,就是我们可能为用户考虑,因为现在一般连网是wifi和手机流量,都知道后者收费是比较高的。假如我们的app加载的图片或者有大的数据下载操作,可是用户的本意是要是在流量下的话就不要操作这些很费流量的的操作,这样就必须要我们做一些连网状态的判断。网络是否连接良好,连接的wifi还是流量,断网或者网络改变了的时候怎么做,这都是一些细节,但是要注意处理。

查看当前网络状态需要的权限:

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

允许查看当前网络状态,比如是3G还是WIFI上网。

二、连接管理

涉及的常用类

ConnectivityManager

翻译成中文即:网络连接管理者 主要作用:

  • 监听手机网络状态(包括GPRS,WIFI, UMTS等)
  • 手机状态发生改变时,发送广播
  • 当一个网络连接失败时进行故障切换
  • 为应用程序提供可以获取可用网络的高精度和粗糙的状态

获取ConnectivityManager

ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 

NetworkInfo

翻译成中文即:网络的状态信息 获取NetworkInfo 通过ConnectivityManager获取

ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();

主要方法:

  • getDetailedState():获取详细状态。
  • isAvailable():判断该网络是否可用,是否可以寻找到网络
  • isConnected():判断是否已经连接
  • isConnectedOrConnecting():判断是否已经连接或正在连接。
  • getState() 获取连接状态
  • getExtraInfo():获取附加信息。
  • getType():获取网络类型(一般为移动(0)或Wi-Fi(1))。
  • getTypeName():获取网络类型名称(一般取值“WIFI”或“MOBILE”)。
  • getReason():获取连接失败的原因。
  • isFailover():判断是否连接失败。
  • isRoaming():判断是否漫游

注意: 1.当用wifi上的时候 getType是WIFI getExtraInfo是空的

2.当用手机上的时候 getType是MOBILE

3.用移动CMNET方式 getExtraInfo的值是cmnet

4.用移动CMWAP方式 getExtraInfo的值是cmwap,但是不在代理的情况下访问普通的网站访问不了

5.用联通3gwap方式 getExtraInfo的值是3gwap

6.用联通3gnet方式 getExtraInfo的值是3gnet

7.用联通uniwap方式 getExtraInfo的值是uniwap

8.用联通uninet方式 getExtraInfo的值是uninet