422
技術社區[雲棲]
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