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/n/145601.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
WOYZWOYZ
上一篇 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

发表回复

登录后才能评论