Android 手機上獲取手機當前上網IP地址(手機網關給手機號分配的IP)
Android 手機上獲取手機當前上網IP地址
(手機網關給手機號分配的IP)
每個手機上網通過移動網關的時候,網關都會給該手機號分配一個IP地址(當然這個IP地址會在下線上線後會改變,網關都有記錄的)
現在做的應用需要獲取該IP地址,提交給服務器,代碼如下:
/**
* 用來獲取手機撥號上網(包括CTWAP和CTNET)時由PDSN分配給手機終端的源IP地址。
*
* @return
* @author SHANHY
*/
public static String getPsdnIp() {
try {
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
return inetAddress.getHostAddress().toString();
}
}
}
} catch (Exception e) {
}
return "";
}
如上這樣寫,在有些情況下就會有問題了,比如我現在用的是安卓4.0係統的手機,按上麵的方法默認會先獲取到ipv6的地址,有時候我們隻想要ipv4的地址,就需要再多做個類型判斷,代碼如下:
/**
* 用來獲取手機撥號上網(包括CTWAP和CTNET)時由PDSN分配給手機終端的源IP地址。
*
* @return
* @author SHANHY
*/
public static String getPsdnIp() {
try {
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {
//if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet6Address) {
return inetAddress.getHostAddress().toString();
}
}
}
} catch (Exception e) {
}
return "";
}
----------------------------------------------------------------------------
謝謝~~~
最後更新:2017-04-02 17:28:39