不管在什么时候,当你的应用需要去访问网络时,你事先都应该知道设备当前已经连上了网络。为了更好的获取设备的网络连接状态,Android提供了两个class来做这件事,分别是ConnectivityManager和NetworkInfo。
一般情况下我们都不需要主动的创建
ConnectivityManager对象实例,我们可以通过上下文对象Context来获取一个实例
ConnectivityManager connManager = (ConnectivityManager)context. getSystemService(Context.CONNECTIVITY_SERVICE);
ConnectivityManager本身其实并没有多大的作用,但它可以获取到
NetworkInfo对象(获取当前的网络连接状态)。有三种方式可以获取到NetworkInfo对象,但是如果你想马上知道网络连接状态的话,下面做法效果最好
NetworkInfo info = connManager.getActiveNetworkInfo();
或者你也可以通过ConnectivityManager获取到系统中一组可用的NetworkInfo对象。每一个NetworkInfo都代表了一种网络类型(e.g. WIFI)。
NetworkInfo info = connManager.getAllNetworkInfo();
通过NetworkInfo对象你能获取到关于一种网络类型所有的信息。你可以检测某一种网络类型当前是否可用,如果当前已经连接到网络了,你能获取到当前连接的网络是那种类型
下面是一些NetworkInfo类比较重要的方法。屏幕上显示的是这些方法执行的结果(WIFI或者UMTS网络的信息 )
info.isAvailable() info.isConnected() info.isConnectedOrConnecting() info.getState() info.getDetailedState() info.getTypeName() info.getType() info.getSubtypeName() info.getSubtype()
访问网络的连接状态需要明确的在manifest文件中声明权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />