Android應用:獲取設備IP地址的簡單方法

一、什麼是IP地址

IP地址是指互聯網協議地址,是一個用於區別互聯網上不同主機的地址,類似於家庭住址,主要用於指定數據在網絡中的目的地址,確定數據通信的源和宿節點的標識。在網絡互連時,IP地址可用於唯一標識一個網絡接口,一台主機可擁有多個網絡接口,每個網絡接口都要分配一個IP地址。

二、為什麼要獲取設備IP地址

在Android開發中,獲取設備IP地址是很基礎的操作,可以用來做諸如網絡狀態監測、服務端通信等功能。

三、獲取設備IP地址的方法

1. 通過WifiManager獲取WiFi IP地址


public static String getWifiIpAddress(Context context) {
    WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    WifiInfo wifiInfo = wifiManager.getConnectionInfo();
    int ipAddress = wifiInfo.getIpAddress();
    return intToIp(ipAddress);
}

private static String intToIp(int i) {
    return (i & 0xFF) + "." +
            ((i >> 8) & 0xFF) + "." +
            ((i >> 16) & 0xFF) + "." +
            (i >> 24 & 0xFF);
}

以上代碼通過WifiManager的getConnectionInfo()方法獲取到WiFiInfo對象,再通過WiFiInfo對象調用getIpAddress()方法獲取到IP地址,最後將十進制的IP地址轉成點分十進制的形式即可。

2. 通過NetworkInterface獲取本地IP地址


public static String getLocalIpAddress() {
    try {
        for (Enumeration en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
            NetworkInterface ni = en.nextElement();
            for (Enumeration enumIpAddr = ni.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
                InetAddress inetAddress = enumIpAddr.nextElement();
                if (!inetAddress.isLinkLocalAddress() && !inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {
                    return inetAddress.getHostAddress();
                }
            }
        }
    } catch (SocketException e) {
        e.printStackTrace();
    }
    return null;
}

以上代碼通過NetworkInterface類獲取到本地網絡接口,再通過網絡接口獲取到InetAddress對象,最後判斷是否是IPv4類型並且不是本地迴環地址和鏈接本地地址,最終獲取到本機IP地址。

四、獲取IP地址的注意事項

1. 獲取IP地址需要網絡訪問權限,在AndroidManifest.xml文件中添加權限<uses-permission android:name=”android.permission.ACCESS_NETWORK_STATE”/>和<uses-permission android:name=”android.permission.ACCESS_WIFI_STATE”/>

2. 如果獲取到的IP地址是0.0.0.0,表示該設備尚未連接到Internet,或者使用的網絡無法為其分配IP地址。

3. 對於使用VPN的設備,獲取到的IP地址可能是VPN服務器的IP地址,而不是本機IP地址。

五、總結

獲取設備IP地址是Android開發中較為常見的操作,一般可以通過WiFiManager或者NetworkInterface來獲取IP地址。但需要注意的是,獲取IP地址需要網絡訪問權限,對於使用VPN的設備,獲取到的IP地址可能與實際不符。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/259703.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-15 16:30
下一篇 2024-12-15 16:30

相關推薦

  • cmd看地址

    本文將從多個方面詳細闡述cmd看地址,包括如何查看本機IP地址、如何查看路由器IP、如何查看DNS服務器IP等等。 一、查看本機IP地址 要查看本機IP地址,首先需要打開cmd窗口…

    編程 2025-04-29
  • ArcGIS更改標註位置為中心的方法

    本篇文章將從多個方面詳細闡述如何在ArcGIS中更改標註位置為中心。讓我們一步步來看。 一、禁止標註智能調整 在ArcMap中設置標註智能調整可以自動將標註位置調整到最佳顯示位置。…

    編程 2025-04-29
  • 解決.net 6.0運行閃退的方法

    如果你正在使用.net 6.0開發應用程序,可能會遇到程序閃退的情況。這篇文章將從多個方面為你解決這個問題。 一、代碼問題 代碼問題是導致.net 6.0程序閃退的主要原因之一。首…

    編程 2025-04-29
  • Python創建分配內存的方法

    在python中,我們常常需要創建並分配內存來存儲數據。不同的類型和數據結構可能需要不同的方法來分配內存。本文將從多個方面介紹Python創建分配內存的方法,包括列表、元組、字典、…

    編程 2025-04-29
  • Python中init方法的作用及使用方法

    Python中的init方法是一個類的構造函數,在創建對象時被調用。在本篇文章中,我們將從多個方面詳細討論init方法的作用,使用方法以及注意點。 一、定義init方法 在Pyth…

    編程 2025-04-29
  • 使用Vue實現前端AES加密並輸出為十六進制的方法

    在前端開發中,數據傳輸的安全性問題十分重要,其中一種保護數據安全的方式是加密。本文將會介紹如何使用Vue框架實現前端AES加密並將加密結果輸出為十六進制。 一、AES加密介紹 AE…

    編程 2025-04-29
  • 用不同的方法求素數

    素數是指只能被1和自身整除的正整數,如2、3、5、7、11、13等。素數在密碼學、計算機科學、數學、物理等領域都有着廣泛的應用。本文將介紹幾種常見的求素數的方法,包括暴力枚舉法、埃…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • Python簡單數學計算

    本文將從多個方面介紹Python的簡單數學計算,包括基礎運算符、函數、庫以及實際應用場景。 一、基礎運算符 Python提供了基礎的算術運算符,包括加(+)、減(-)、乘(*)、除…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29

發表回復

登錄後才能評論