Android獲取IP詳解

一、Android獲取IP地址權限

在Android系統中,獲取IP地址需要使用網絡狀態權限,可以通過以下代碼獲取網絡狀態權限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

其中,ACCESS_NETWORK_STATE是獲取網絡狀態的權限,INTERNET是使用網絡的權限。

二、Android獲取IP

在Android系統中,可以通過以下代碼獲取IP:

public String getIPAddress(boolean useIPv4) {
    try {
        List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
        for (NetworkInterface intf : interfaces) {
            List<InetAddress> addrs = Collections.list(intf.getInetAddresses());
            for (InetAddress addr : addrs) {
                if (!addr.isLinkLocalAddress()) {
                    String sAddr = addr.getHostAddress();
                    boolean isIPv4 = InetAddressUtils.isIPv4Address(sAddr);
                    if (useIPv4) {
                        if (isIPv4)
                            return sAddr;
                    } else {
                        if (!isIPv4) {
                            int delim = sAddr.indexOf('%'); // 分離IPv6地址中的zone
                            return delim<0 ? sAddr.toUpperCase() : sAddr.substring(0, delim).toUpperCase();
                        }
                    }
                }
            }
        }
    } catch (Exception e) {
        Log.e("getIPAddress", e.toString());
    }
    return "";
}

其中,getNetworkInterfaces()方法獲取網絡接口列表,getInetAddresses()方法獲取網絡接口的IP地址列表。

三、Android獲取OAID

OAID是一種由中國移動廣告聯盟提出的Android設備標識符,可以用於替代AndroidID等識別標識符,一些手機品牌已開放獲取OAID的API。

獲取OAID的方式如下所示:

import com.bun.miitmdid.core.JLibrary;

public class MainActivity extends AppCompatActivity {
    TextView tv_oaid;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tv_oaid = findViewById(R.id.tv_oaid);

        // 初始化OAID庫
        JLibrary.InitEntry(this);

        // 獲取OAID
        MiitHelper miitHelper = new MiitHelper(new MiitHelper.AppIdsUpdater() {
            @Override
            public void OnIdsAvalid(@NonNull final String ids) {
                tv_oaid.setText(ids);
            }
        });
        miitHelper.getDeviceIds(this);
    }
}

四、Android獲取IP地址不準確的問題

在Android系統中,獲取IP地址的方法可能會因為手機的網絡模式而導致不準確的問題,可以通過以下代碼規避問題:

public String getIPAddress() {
    WifiManager wm = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);
    String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());
    return ip;
}

其中,WIFI_SERVICE是獲取WIFI服務的系統服務,getConnectionInfo()方法獲取WIFI連接信息,getIpAddress()方法獲取IP地址。

五、Android獲取IP和MAC地址

Android系統中,可以通過WifiManager類獲取IP和MAC地址:

public String getIpAddress() {
    WifiManager wm = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);
    String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());
    return ip;
}

public String getMacAddress() {
    WifiManager wm = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);
    return wm.getConnectionInfo().getMacAddress();
}

其中,getMacAddress()方法獲取MAC地址。

六、Android獲取IPv4和IPv6地址

Android系統中,可以通過以下代碼分別獲取IPv4和IPv6地址:

public String getIPv4Address() {
    try {
        List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
        for (NetworkInterface iface : interfaces) {
            List<InetAddress> addrs = Collections.list(iface.getInetAddresses());
            for (InetAddress addr : addrs) {
                if (!addr.isLoopbackAddress() && addr instanceof Inet4Address) {
                    return addr.getHostAddress();
                }
            }
        }
    } catch (Exception e) {
        Log.e("getIPv4Address", e.toString());
    }
    return "";
}

public String getIPv6Address() {
    try {
        List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
        for (NetworkInterface iface : interfaces) {
            List<InetAddress> addrs = Collections.list(iface.getInetAddresses());
            for (InetAddress addr : addrs) {
                if (!addr.isLoopbackAddress() && addr instanceof Inet6Address) {
                    return addr.getHostAddress();
                }
            }
        }
    } catch (Exception e) {
        Log.e("getIPv6Address", e.toString());
    }
    return "";
}

七、獲取AndroidID

AndroidID是Android系統中的一個字符串,用於標識設備。它在設備首次啟動時生成,並且無法更改。

獲取AndroidID的方式如下所示:

public String getAndroidID() {
    String android_id = Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID);
    return android_id;
}

八、結語

以上就是Android獲取IP的詳細介紹,通過不同的方法可以獲取不同的信息,根據實際需求選擇相應的方式即可。

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
WOYZ的頭像WOYZ
上一篇 2024-10-27 23:51
下一篇 2024-10-27 23:51

相關推薦

  • Centos7配置靜態ip

    本文將詳細闡述如何在Centos7系統中配置靜態ip。 一、查看網絡接口 在配置靜態ip之前,我們首先需要查看系統中的網絡接口,以確定我們需要配置的網卡是哪一個。 ifconfig…

    編程 2025-04-29
  • Python檢測IP連通

    Python是一門強大的編程語言,常用於網絡開發、數據分析等領域。IP地址是網絡通信的基礎,在網絡通信中,有時需要檢測IP地址是否連通。下面將從多個方面介紹Python檢測IP連通…

    編程 2025-04-28
  • Android ViewPager和ScrollView滑動衝突問題

    Android開發中,ViewPager和ScrollView是兩個常用的控件。但是當它們同時使用時,可能會發生滑動衝突的問題。本文將從多個方面介紹解決Android ViewPa…

    編程 2025-04-28
  • Android如何點擊其他區域收起軟鍵盤

    在Android應用中,當輸入框獲取焦點彈出軟鍵盤後,我們希望能夠點擊其他區域使軟鍵盤消失,以提升用戶體驗。本篇文章將說明如何實現這一功能。 一、獲取焦點並顯示軟鍵盤 在Andro…

    編程 2025-04-28
  • Treck TCP/IP Stack 輸入驗證錯誤漏洞CVE-2020-11901解析

    本文將對Treck TCP/IP Stack 輸入驗證錯誤漏洞CVE-2020-11901進行詳細解析,並提供相關代碼示例。 一、漏洞背景 Treck TCP/IP Stack是一…

    編程 2025-04-27
  • Android Studio HUD 實現指南

    本文將會以實例來詳細闡述如何在 Android Studio 中使用 HUD 功能實現菊花等待指示器的效果。 一、引入依賴庫 首先,我們需要在 build.gradle 文件中引入…

    編程 2025-04-27
  • Android和Vue3混合開發方案

    本文將介紹如何將Android和Vue3結合起來進行混合開發,以及其中的優勢和注意事項。 一、環境搭建 在進行混合開發之前,需要搭建好相應的開發環境。首先需要安裝 Android …

    編程 2025-04-27
  • Android Java Utils 可以如何提高你的開發效率

    Android Java Utils 是一款提供了一系列方便實用的工具類的 Java 庫,可以幫助開發者更加高效地進行 Android 開發,提高開發效率。本文將從以下幾個方面對 …

    編程 2025-04-27
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25

發表回復

登錄後才能評論