Android 手機上獲取手機當前上網IP地址(手機網關給手機號分配的IP)

jopen 11年前發布 | 59K 次閱讀 Android Android開發 移動開發

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