簡體   English   中英

如何在Xamarin.Forms中獲取客戶端設備的MAC地址?

[英]How to get MAC address of a client device in Xamarin.Forms?

在我的客戶端 - 服務器解決方案中,我需要前端設備的MAC地址,運行我的Xamarin.Forms應用程序。 目前我只有一個條目,用戶應該鍵入運行應用程序的設備的mac地址(主界面)。

我已經搜索了這個主題,發現iOS和Android對返回MAC有限制。 我也知道James Montemagno的Device插件 ,它沒有提供我需要的東西。 還有可能得到它嗎? 我可以至少使用用戶可以手動復制MAC的確切設置頁面的快捷方式嗎?

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

我的解決方案是員工分享其可用性和位置的平台。 員工可以輸入設備信息,以便后端可以找到他們的設備。 然后后端可以給你這樣的信息:John Doe目前在辦公室(因為他的設備在網絡中找到)並且在河邊的二樓(因為他的設備在那個確切的位置與wifi控制器連接) )。 其他希望與約翰交談的員工肯定知道他們可以去約翰而不是寫郵件或打電話給他。 該解決方案通過可以自動提取但仍保持隱私的准確數據促進直接溝通和工作與生活的平衡,因為員工必須積極地共享他們的信息以獲得自動狀態。 最重要的是,收集的數據與您在辦公室詢問或走動時獲得的數據相同。

我發現確實不可能在iOS,Android和UWP上獲得Mac地址。 正如我在回答中建議的那樣,解決方法是在應用程序上創建一個按鈕,然后打開包含MAC地址的設置頁面。 這可以通過Dependency Service實現,這是接口的接口和平台實現。 我已經完成了這個並在GitHub上的Gist中發布了它:

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

要求是應該支持所有三個平台和所有版本,並且在每個平台上應該對異常行為進行相同的操作。 對於iOS,根據平台的不同,有一些變化取決於iOS版本和UWP。

如果有錯誤或者您找到了更好的解決方案,請告訴我。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM