Android 设备信息(三)

本篇文章主要记录下Android下设备网络相关的一些信息以及获取方法.

1: 当前网络连接状态

ConnectivityManager是Android平台上的一个系统服务,用于管理网络连接。
它提供了一组API,用于检测和控制设备的网络连接状态。
ConnectivityManager可以帮助应用程序监测网络连接的可用性,并根据需要切换网络连接。

getActiveNetworkInfo(): 获取当前活动的网络连接信息. 该方法需要申请权限:
android.Manifest.permission.ACCESS_NETWORK_STATE

具体的方法如下:

public static final int CONNECT_NET_NONE = 0;
public static final int CONNECT_NET_WIFI = 1;
public static final int CONNECT_NET_MOBILE = 2;

/**
* @return 当前连接的网络类型
* request ACCESS_NETWORK_STATE
*/
public static int getConnectNetType(Context context) {
if (context == null) {
return CONNECT_NET_NONE;
}
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager == null) {
return CONNECT_NET_NONE;
}
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
if (activeNetworkInfo != null && activeNetworkInfo.isAvailable()) {
NetworkInfo networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (networkInfo == null) {
return CONNECT_NET_WIFI;
}
NetworkInfo.State state = networkInfo.getState();
if (state == NetworkInfo.State.CONNECTED) {
return CONNECT_NET_MOBILE;
} else {
return CONNECT_NET_WIFI;
}
}
return CONNECT_NET_NONE;
}

2:判断当前是否联网

判断是否联网的方法还是用到了connectivityManager.getActiveNetworkInfo()方法.
根据获取到的NetworkInfo我们调用isAvailable();
封装的方法如下:

/**
* @return 当前网络是否连接
* request ACCESS_NETWORK_STATE
*/
public static boolean isNetConnected(Context context) {
if (context == null) {
return false;
}
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager != null) {
NetworkInfo info = connectivityManager.getActiveNetworkInfo();
return info != null && info.isAvailable();
}
return false;
}

3:获取移动网络下ip地址

获取移动网络下的ip地址具体的思路如下:

  1. NetworkInterface.getNetworkInterfaces():获取当前主机上所有网络接口的列表.
  2. networkInterface.getInetAddresses():获取网络接口的所有IP地址
  3. format()方法用于格式化ip.

/**
* @return
* request android.permission.INTERNET
*/
public static String getMobileIp() {
try {
Enumeration en = NetworkInterface.getNetworkInterfaces();
if (en == null) {
return “”;
}
for (en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
NetworkInterface networkInterface = en.nextElement();
if (networkInterface.isLoopback() || networkInterface.isVirtual() || !networkInterface.isUp()) {
continue;
}
InetAddress preferredAddress = null;
for (Enumeration enumeration = networkInterface.getInetAddresses(); enumeration.hasMoreElements(); ) {
InetAddress inetAddress = enumeration.nextElement();
//skip ipv6 local address
if (inetAddress.isLoopbackAddress() || inetAddress.isLinkLocalAddress()) {
continue;
}
//prefer ipv4 over ipv6
if (inetAddress instanceof Inet4Address) {
preferredAddress = inetAddress;
break;
}
//take first ipv6 address
if (preferredAddress == null) {
preferredAddress = inetAddress;
}
}
if (preferredAddress != null) {
return format(preferredAddress);
}
}
} catch (Throwable e) {
e.printStackTrace();
}
return “”;
}

private static String format(InetAddress address) {
if (address instanceof Inet4Address) {
return address.getHostAddress();
} else if (address instanceof Inet6Address) {
final String ip = address.getHostAddress();
final int index = ip.indexOf(‘%’);
if (index >= 0) {
return ip.substring(0, index);
} else {
return ip;
}
}
return “”;
}

4:获取wifi下ip

获取wifi下的ip地址,我们需要用到WifiManager类.

  1. 通过Context.getSystemService(Context.WIFI_SERVICE)方法获取到WifiManager对象
  2. 通过WifiManager对象调用getConnectionInfo()方法即可获取到当前连接的Wi-Fi网络的信息 需要申请权限
  3. <uses-permission android:name=“android.permission.ACCESS_WIFI_STATE”/>
  4. wifiInfo.getIpAddress(): 获取当前设备连接的Wi-Fi网络的IP地址.
  5. intToIp()方法用于转换ip地址.

/**
* @param context
* @return 获取ip
* request android.permission.ACCESS_WIFI_STATE
*/
public static String getWifiIp(Context context) {
final WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
final WifiInfo wifiInfo = wifiManager.getConnectionInfo();
if (wifiInfo != null) {
int ipAddress = wifiInfo.getIpAddress();
if (ipAddress != 0) {
return intToIp(ipAddress);
}
}
return “”;
}
private static String intToIp(int i) {
return (i & 0xFF) + “.” +
((i >> 8) & 0xFF) + “.” +
((i >> 16) & 0xFF) + “.” +
(i >> 24 & 0xFF);
}

5:获取ip地址

下面的方法是对前面方法的封装.

/**
* @param context
* @return 获取ip地址
* request android.permission.INTERNET
* request android.permission.ACCESS_WIFI_STATE
*/
public static String getIp(Context context) {
try {
if (getConnectNetType(context) == CONNECT_NET_WIFI) {
return getWifiIp(context);
} else {
return getMobileIp();
}
} catch (Throwable e) {
Log.e(“xxxx”, “getip :”, e);
}
return “”;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值