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

DaW*_*guy 4 android mac-address xamarin.android xamarin

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

我有这些权限激活:

ACCESS_WIFI_STATE INTERNET READ_PHONE_STATE

我尝试的唯一代码是Android 6.0版下面使用的简单方法.任何帮助表示赞赏.

编辑:我不认为这是一个副本,因为我特别要求ac#版本的代码

Tim*_*äki 9

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

您仍然可以访问附近设备的MAC地址,如官方Android文档中所述:

要通过蓝牙和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));
}
Run Code Online (Sandbox Code Playgroud)

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