2016-09-19 464 views
0

如何在Android和iOS手機的Unity Game App中獲得BSSID(我連接的無線路由器的MAC地址,而不是我的設備MAC地址)?如何獲得我在Unity(C#)中連接的無線網絡的BSSID?

我已經嘗試過這些方法,但都沒有工作。我通過將它打印在遊戲場景中來檢查結果。請幫助

*方法1:此代碼做工精細,並得到正確的BSSID信息,但它只是在編輯器中,在工作的時候它建於Android應用它不工作,返回的字符串是什麼(不空,但空值)。

string mac = ""; 
var card = NetworkInterface.GetAllNetworkInterfaces().FirstOrDefault(); 
if (card == null) 
    return null; 
else 
{ 
    byte[] bytes = card.GetPhysicalAddress().GetAddressBytes(); 
    for (int i = 0; i < bytes.Length; i++) 
    { 
     mac = string.Concat(mac + (string.Format("{0}", bytes[i].ToString("X2")))); 
     if (i != bytes.Length - 1) 
     { 
      //This is just for formating the final result 
      mac = string.Concat(mac + ":"); 
     } 
    } 
    mac = card.GetPhysicalAddress().ToString(); 
    return mac; 
} 

*方法2:我使用AndroidJavaClass調用一個機器人的功能,在Android手機獲得BSSID作爲統一文件內。關於統一AndroidJavaClassWifiInfo類的Android

string mac = ""; 
AndroidJavaClass jc = new AndroidJavaClass("android.net.wifi.WifiInfo"); 
mac = jc.Call<string>("getBSSID"); 

的更多信息我也加入Android的許可,通過對矯正在位置「的AndroidManifest.xml」文件「[項目位置] \資產\插件\ Android的」閱讀與wifi的狀態下面的代碼

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 

由於此方法不適用於編輯器,我構建並運行此Android手機上,但沒有字符串返回。任何人都可以幫助我。

回答

0

您需要製作插件才能在移動設備上執行此操作。

對於iOS,您必須將此answer轉換爲插件,然後從C#調用它。在那裏有很多Unity iOS插件教程,可以幫助你開始做這件事。

是Android,您應該先check如果無線網絡連接獲取BSSID與下面的代碼之前啓用:

public static string getSSID() 
{ 
    string tempSSID = ""; 

    try 
    { 
     using (var activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity")) 
     { 
      using (var wifiManager = activity.Call<AndroidJavaObject>("getSystemService", "wifi")) 
      { 
       tempSSID = wifiManager.Call<AndroidJavaObject>("getConnectionInfo").Call<string>("getSSID"); 
      } 
     } 
    } 
    catch (Exception e) 
    { 

    } 
    return tempSSID; 
} 

public static string getBSSID() 
{ 
    string tempBSSID = ""; 

    try 
    { 
     using (var activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity")) 
     { 
      using (var wifiManager = activity.Call<AndroidJavaObject>("getSystemService", "wifi")) 
      { 
       tempBSSID = wifiManager.Call<AndroidJavaObject>("getConnectionInfo").Call<string>("getBSSID"); 
      } 
     } 
    } 
    catch (Exception e) 
    { 

    } 
    return tempBSSID; 
} 

不要忘了,包括權限<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

+1

非常感謝你現在正在工作 – Lucas1805

相關問題