Android如何获取IP和UA

寻技术 Android 2023年08月06日 140

本篇内容主要讲解“Android如何获取IP和UA”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android如何获取IP和UA”吧!

    获取IP

    最近接入了一个新的SDK,初始化接口需要传入当前设备的IP和UA作为参数。

    使用WIFI联网与不使用WIFI,获取到的IP地址不同。因此,需要先判断当前设备通过哪种方式联网,然后再获取对应的IP地址。

    判断网络连接类型

    通过

    ConnectivityManager
    判断网络连接类型,代码如下:
    private fun checkCurrentNetworkType() {
        val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        connectivityManager.run {
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
                when (activeNetworkInfo?.type) {
                    ConnectivityManager.TYPE_MOBILE -> {
                        // 通过手机流量
                    }
                    ConnectivityManager.TYPE_WIFI -> {
                        // 通过WIFI
                    }
                    else -> {}
                }
            } else {
                // Android M 以上建议使用getNetworkCapabilities API
                activeNetwork?.let { network ->
                    getNetworkCapabilities(network)?.let { networkCapabilities ->
                        if (networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)) {
                            when {
                                networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> {
                                    // 通过手机流量
                                }
                                networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> {
                                    // 通过WIFI
                                }
                            }
                        }
                    }
                }
            }
        }
    }

    获取手机卡联网 IP

    通过

    NetworkInterface
    获取IPV4地址,代码如下:
    NetworkInterface.getNetworkInterfaces().let {
        loo@ for (networkInterface in Collections.list(it)) {
            for (inetAddresses in Collections.list(networkInterface.inetAddresses)) {
                if (!inetAddresses.isLoopbackAddress && !inetAddresses.isLinkLocalAddress) {
                    // IP地址
                    val mobileIp = inetAddresses.hostAddress
                    break@loo
                }
            }
        }
    }

    获取WIFI联网 IP

    通过

    ConnectivityManager
    WifiManager
    来获取IP地址,代码如下:
    private fun getWIFIIp() {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
            val wifiManager = applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
            // IP 地址
            val wifiIp = Formatter.formatIpAddress(wifiManager.connectionInfo.ipAddress)
        } else {
            // Android Q 以上建议使用getNetworkCapabilities API
            val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
            connectivityManager.run {
                activeNetwork?.let { network ->
                    (getNetworkCapabilities(network)?.transportInfo as? WifiInfo)?.let { wifiInfo ->
                        // IP 地址
                        val wifiIp = Formatter.formatIpAddress(wifiInfo.ipAddress)
                    }
                }
            }
        }
    }

    获取UA

    获取设备的UserAgent比较简单,代码如下:

    // 系统 UA
    System.getProperty("http.agent")
    // WebView UA
    WebSettings.getDefaultUserAgent(context)
    关闭

    用微信“扫一扫”