您的位置:首页 > 理论基础 > 计算机网络

Android 的网络判定(网络连接类型和监听网络连接变化)

2016-10-14 20:03 513 查看
现在,Android手机作为市场占有量最大的移动设备,拥有着无数的需要连接网络的App,同时人们也渐渐不能离开需要网络的生活,相信大家都知道,在一些IMApp,类似于QQ,Wechat等通信工具中,并不需要很大的网络流量,普通的GPRS数据流量就可以应付自如。但是,当需要在线收看视频或者下载大型软件游戏的时候,在Wi-Fi连接下会有比较好的体验。作为开发者,在开发对网络连接非常敏感的App时,我们就需要对当前的网络做一定的判定和处理了。

下面就引出我们今天需要介绍的主角——ConnectivityManager

一、判断用户是否连接到网络

使用ConnectivityManager 可以判断是否有网络连接,代码如下:

ConnectivityManager cm= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info=cm.getActiveNetworkInfo();
boolean isConnected=info.isConnected();


代码很简单,相信大家一目了然。

二、判断网络连接的类型

网络的连接有多种类型,这里给出当前连接的是否是WiFi的判断。

boolean isWifi=info.getType()==ConnectivityManager.TYPE_WIFI;


除此之外还有很多判断,比如蓝牙,GRPS等。其他类型如下:



三、监控网络连接变化

对于移动设备来说,联网类型和状态的改变是非常频繁的,所以监视网络状态连接的就变得非常必要了。Android系统在监测网络连接变化方面使用的是发送广播的方式。

每当网络连接状态发生了变化,ConnectivityManager会广播一个CONNECTIVITY_ACTION("android.net.conn.CONNECTIVITY_CHANGE")。可以在清单文件中注册一个广播接收器接收网络连接变化的广播。

下面通过一个示例,介绍根据广播消息判断网络连接的情况。代码如下:

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.util.Log;
import android.widget.Toast;

/**
* Created by 宫智耀 on 2016/10/14.
*/
public class ConnectionChangeReceiver extends BroadcastReceiver {
private static final String TAG = ConnectionChangeReceiver.class.getSimpleName();

@Override
public void onReceive(Context context, Intent intent) {
Log.e(TAG, "网络状态改变");
boolean success = false;
//获得网络连接服务
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(context.CONNECTIVITY_SERVICE);
//获取wifi连接状态
NetworkInfo.State state = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
//判断是否正在使用wifi网络
if (state == NetworkInfo.State.CONNECTED) {
success = true;
}
//获取GPRS状态
state = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();
//判断是否在使用GPRS网络
if (state == NetworkInfo.State.CONNECTED) {
success = true;
}
//如果没有连接成功
if(!success){
Toast.makeText(context,"当前网络无连接",Toast.LENGTH_SHORT).show();
}

}
}

manifest的清单文件中:

<!--检测网络连接变化-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
...
...
<receiver android:name=".ConnectionChangeReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>


除了上面在清单文件中注册的方式,还可以实现动态的注册与注销。

可以在Activity的onCreate()中注册监听,在onDestroy()中取消监听。

或是在应用启动时,启动Service,在Service的onCreate()方法中注册网络监听,在应用退出时,Service关闭,在Service的OnDestroy()中取消监听。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: