import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
public class NetworkUtils {
public static final String NET_TYPE_NO_NETWORK = "NO_NETWORK";
public static final String IP_DEFAULT = "0.0.0.0";
/**
* 是否接入internet
*
* @param context
* @return
*/
public static boolean isConnectInternet(Context context) {
final ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
final NetworkInfo networkInfo = connectivityManager
.getActiveNetworkInfo();
if (networkInfo != null) {
return networkInfo.isAvailable();
}
return false;
}
/**
* 是否接入wifi
*
* @param context
* @return
*/
public static boolean isConnectWifi(Context context) {
ConnectivityManager mConnectivity = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = mConnectivity.getActiveNetworkInfo();
// 判断网络连接类型,只有在3G或wifi里进行一些数据更新。
int netType = -1;
if (info != null) {
netType = info.getType();
}
if (netType == ConnectivityManager.TYPE_WIFI) {
return info.isConnected();
} else {
return false;
}
}
/**
* 是否接入数据连接
*
* @param context
* @return
*/
public static boolean isConnectMobile(Context context) {
ConnectivityManager mConnectivity = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = mConnectivity.getActiveNetworkInfo();
// 判断网络连接类型,只有在3G或wifi里进行一些数据更新。
int netType = -1;
if (info != null) {
netType = info.getType();
}
if (netType == ConnectivityManager.TYPE_MOBILE) {
return info.isConnected();
} else {
return false;
}
}
/**
* 获取地址
*
* @param context
* @return
*/
public static String getIPAddress(Context context) {
String type = getConnTypeName(context);
if (type.equals("WIFI")) {
return getWifiIpAddress(context);
} else {
return get3GIPAddress();
}
}
/**
* 获取3g地址
*
* @return
*/
public static String get3GIPAddress() {
try {
Enumeration<NetworkInterface> networkInterfaceEnumeration = NetworkInterface
.getNetworkInterfaces();
while (networkInterfaceEnumeration.hasMoreElements()) {
NetworkInterface networkInterface = networkInterfaceEnumeration
.nextElement();
Enumeration<InetAddress> inetAddressEnumeration = networkInterface
.getInetAddresses();
while (inetAddressEnumeration.hasMoreElements()) {
InetAddress inetAddress = inetAddressEnumeration
.nextElement();
if (!inetAddress.isLoopbackAddress()) {
return inetAddress.getHostAddress();
}
}
}
return NetworkUtils.IP_DEFAULT;
} catch (final SocketException e) {
return NetworkUtils.IP_DEFAULT;
}
}
/**
* 获取wifi地址
*
* @param context
* @return
*/
public static String getWifiIpAddress(Context context) {
WifiManager wifiManager = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
// 获取32位整型IP地址
int ipAddress = wifiInfo.getIpAddress();
// 返回整型地址转换成“*.*.*.*”地址
return String.format("%d.%d.%d.%d", (ipAddress & 0xff),
(ipAddress >> 8 & 0xff), (ipAddress >> 16 & 0xff),
(ipAddress >> 24 & 0xff));
}
/**
* 网络连接类型
*
* @param context
* @return
*/
public static String getConnTypeName(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if (networkInfo == null) {
return NET_TYPE_NO_NETWORK;
} else {
return networkInfo.getTypeName();
}
}
}
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET" />
public class NetWorkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isAvailable()) {
Toast.makeText(context, "网络已连接", 0).show();
} else {
Toast.makeText(context, "网络已断开", 0).show();
}
}
}
IntentFilter intentFilter = new IntentFilter(
"android.net.conn.CONNECTIVITY_CHANGE");
netWorkChangeReceiver = new NetWorkChangeReceiver();
registerReceiver(netWorkChangeReceiver, intentFilter);
unregisterReceiver(netWorkChangeReceiver);