閱讀422 返回首頁    go 技術社區[雲棲]


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

  上一篇:go android自定義帶倒影的ImageView控件
  下一篇:go Hibernate一對一單向外鍵關聯(簡單總結了5種方法)