如何在Xamarin.Forms中获取客户端设备的MAC地址?

时间:2017-02-28 08:15:43

标签: c# .net networking xamarin xamarin.forms

在我的客户端 - 服务器解决方案中,我需要前端设备的MAC地址,运行我的Xamarin.Forms应用程序。目前我只有一个条目,用户应该键入运行应用程序的设备的mac地址(主界面)。

我已经搜索了这个主题,发现iOS和Android在返回MAC时受到限制。我也知道James Montemagno的Device plugin并没有提供我需要的东西。还有可能得到它吗?我可以至少使用用户可以手动复制MAC的确切设置页面的快捷方式吗?

有些人可能想知道:为什么我需要mac地址?

我的解决方案是员工分享其可用性和位置的平台。员工可以输入设备信息,以便后端可以找到他们的设备。然后后端可以给你这样的信息:John Doe目前在办公室(因为他的设备在网络中找到)并且在河边的二楼(因为他的设备在那个确切的位置与wifi控制器连接) )。其他希望与约翰交谈的员工肯定知道他们可以去约翰而不是写邮件或打电话给他。该解决方案通过可以自动提取但仍保持隐私的准确数据促进直接沟通和工作与生活的平衡,因为员工必须积极地共享他们的信息以获得自动状态。最重要的是,收集的数据与您在办公室询问或走动时获得的数据相同。

2 个答案:

答案 0 :(得分:0)

我发现在iOS,Android和UWP上确实无法获得Mac地址。正如我在回答中建议的那样,解决方法是在应用程序上创建一个按钮,然后打开包含MAC地址的设置页面。这可以通过Dependency Service实现,这是接口的接口和平台实现。我已经完成了这个并在GitHub上的Gist中发布了它:

https://gist.github.com/zuckerthoben/ee097b816b88491f5874bb327ec6819c

要求是应该支持所有三个平台和所有版本,并且在每个平台上应该对异常行为进行相同的操作。对于iOS,根据iOS版本和UWP的不同,具体取决于平台。

如果有错误或者您找到了更好的解决方案,请告诉我。

答案 1 :(得分:0)

据我所知,无法在IOS上获取Mac地址,但在Android和UWP上却可以。这是我的工作

var ni = NetworkInterface.GetAllNetworkInterfaces()
   .OrderBy(intf => intf.NetworkInterfaceType)
   .FirstOrDefault(intf => intf.OperationalStatus == OperationalStatus.Up
         && (intf.NetworkInterfaceType == NetworkInterfaceType.Wireless80211
             || intf.NetworkInterfaceType == NetworkInterfaceType.Ethernet));

然后:

var hw = ni.GetPhysicalAddress();
return string.Join(":", (from ma in hw.GetAddressBytes() select ma.ToString("X2")).ToArray());

这将返回MAC地址,例如: 63:D5:16:27:DE:95