【问题标题】:How to get MAC address of a client device in Xamarin.Forms?如何在 Xamarin.Forms 中获取客户端设备的 MAC 地址?
【发布时间】:2017-07-19 02:38:16
【问题描述】:

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

我已经搜索过该主题,发现iOS和Android对返回MAC有限制。我也知道来自 James Montemagno 的 Device plugin,但它并没有提供我需要的东西。还有机会得到吗?我可以至少创建一个用户可以手动复制 MAC 的确切设置页面的快捷方式吗?

可能有人会问:为什么需要mac地址?

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

【问题讨论】:

  • SO 问题仅针对 Android。在 UWP、iOS、Android Xamarin.Forms 解决方案中,只有 Android 是不值得的。 Xam 论坛线程建议该 API 现在在 iOS 中已弃用。这就是我在介绍中所指出的。仍然可以选择使用 Xamarin.iOS 获取确切设置页面的快捷方式。如果我可以读取代码中的 MAC 或转发到确切的页面,我可以为此连接一个依赖服务并将其放在按钮后面,从而导致读取或转发。 @Tatranskymedved
  • 想法:倒推:如果你能得到设备连接的网络的BSSID,设备就可以知道它在办公室。那么您所需要的只是设备的其他标识符...
  • 当然,我可以做一个在设备上定期运行的后台任务。不过,我不太喜欢那样。如果我有 mac 地址,我也无法从 Wifi 控制器中获取可以通过 SNMP 获取的信息。我还想过只使用当前 IP,让后端从该 IP 中找出 mac,但这比我想象的要难。那我还需要查询IP。我正在实施一个依赖服务,以便在此时打开每个平台上的 wifi 设置。

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


【解决方案1】:

据我所知,在 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

【讨论】:

    【解决方案2】:

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

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

    要求应该支持所有三个平台和所有版本,并且在异常行为方面应该在每个平台上工作相同。对于 iOS,根据 iOS 版本和 UWP 平台会有所不同。

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

    【讨论】:

    • 在下面查看我的答案
    猜你喜欢
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    • 2019-07-12
    • 2021-03-18
    • 1970-01-01
    • 2013-11-07
    • 2013-11-08
    • 1970-01-01
    相关资源
    最近更新 更多