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 "";
} 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!