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

时间:2016-09-12 18:58:16

标签: android xamarin xamarin.android mac-address

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

我已激活这些权限:

ACCESS_WIFI_STATE  互联网  READ_PHONE_STATE

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

编辑:我不相信这是重复的,因为我特别要求提供c#版本的代码

1 个答案:

答案 0 :(得分:8)

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

您仍然可以访问附近设备的MAC地址,如official Android documentation

中所述
  

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

编辑虽然不支持获取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));
}

要在现实世界中使用它,需要进行一些空引用检查和其他修改,但它可以正常工作。