如何在 C# 中使用 6.0 或更高版本获取 Android 设备的 Mac 地址?

2024-01-01

我发现了一些使用 Java 的示例,但是我在构建 C# 方法时遇到了麻烦。任何人都可以发布一个简单的 C# 示例来获取我的设备的 Mac 地址,FOR Marshmallow (6.0)。我知道还有其他方法可以获取唯一 ID,但我现在对导入组件并不真正感兴趣。我将 Xamarin 与 Visual Studio 2015 结合使用。

我已激活这些权限:

ACCESS_WIFI_STATE 互联网 READ_PHONE_STATE

我尝试过的唯一代码是用于以下 android 版本 6.0 的简单方法。任何帮助表示赞赏。

EDIT: 我不认为这是重复的,因为我专门请求了代码的 C# 版本


不幸的是,你运气不好。从6.0版本开始,Android限制了对MAC地址的访问。如果您尝试查询当前设备的 MAC 地址,您将得到一个恒定值02:00:00:00:00:00

您仍然可以访问附近设备的 MAC 地址,如Android 官方文档 https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-hardware-id:

要通过蓝牙和 Wi-Fi 扫描访问附近外部设备的硬件标识符,您的应用现在必须具有 ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION 权限:

Edit:虽然不支持获取 MAC 地址的官方方法,但通过一些绕道似乎确实是可能的。我在这里发布了一个最小的示例,它只遍历所有网络接口并将 MAC 地址输出到控制台(如果有):

// NetworkInterface is from Java.Net namespace, not System.Net
var all = Collections.List(NetworkInterface.NetworkInterfaces);

foreach (var interface in all)
{
    var macBytes = (interface as NetworkInterface).GetHardwareAddress();

    if (macBytes == null) continue;

    var sb = new StringBuilder();
    foreach (var b in macBytes)
    {
        sb.Append((b & 0xFF).ToString("X2") + ":");
    }

    Console.WriteLine(sb.ToString().Remove(sb.Length - 1));
}

要在现实场景中使用它,需要进行一些空引用检查和其他修改,但它是有效的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 C# 中使用 6.0 或更高版本获取 Android 设备的 Mac 地址? 的相关文章

随机推荐