【问题标题】:can't get mac address while targetSdkVersion is 31targetSdkVersion 为 31 时无法获取 mac 地址
【发布时间】:2022-01-04 05:37:27
【问题描述】:

我在我的应用程序中获得了 mac 地址。当 targetSdkVersion 为 29 时一切都正确,但是当将 targetSdkVersion 更新为 31 时,我无法获取 mac 地址。

private fun getMacAddress(): String =
    NetworkInterface.getNetworkInterfaces().toList()
        .firstOrNull { it.name.equals("wlan0", ignoreCase = true) }?.let {
            it.hardwareAddress?.let { macBytes ->
                StringBuilder().apply {
                    for (b in macBytes) {
                        append(String.format("%02X:", b))
                    }
                    if (isNotEmpty()) {
                        deleteCharAt(lastIndex)
                    }
                }
            }?.toString() ?: run {
                "00:00:00:00:00:00"
            }
        } ?: "00:00:00:00:00:00"

【问题讨论】:

    标签: java android kotlin mac-address


    【解决方案1】:

    你不能在>= 31 SDK版本的mac地址 但您可以使用 android_id 唯一标识您的设备

    导入android.provider.Settings.Secure;

    private String android_id = Secure.getString(getContext().getContentResolver(),
                                                            Secure.ANDROID_ID);
    

    【讨论】:

      【解决方案2】:

      简而言之,你不能。

      根据Android Developers - MAC address availability changes in Android 11,如果您针对 Android 11,他们会阻止对 MAC 地址的访问:

      此外,非特权应用无法访问设备的 MAC 地址;只有具有 IP 地址的网络接口可见。这会影响getifaddrs()NetworkInterface.getHardwareAddress() 方法,以及发送RTM_GETLINK Netlink 消息。

      另外,来自NetworkInterface.getHardwareAddress documentation

      例如,这个方法在被targetSdkVersion >= android.os.Build.VERSION_CODES.R.的非系统应用调用时一般会返回null

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多