2016-09-19 1 views
0

Wie kann ich BSSID (MAC-Adresse des WLAN-Routers, den ich anschließe, nicht meine Gerät-MAC-Adresse) in meiner Unity Game App auf Android- und iOS-Telefon erhalten?Wie bekomme ich BSSID von Wifi ich in Unity (C#) verbinden?

Ich habe diese Methode versucht, aber keine von ihnen funktioniert. Ich überprüfe das Ergebnis, indem ich es auf Spielszene drucke. Bitte helfen

* Methode 1: Dieser Code arbeiten gut und bekommen die Informationen richtig BSSID, aber es ist nur auf Editor arbeiten, wenn ich es auf Android App bauen es nicht funktioniert, Rückgabe-String ist nichts (nicht null, aber leeren Wert).

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; 
} 

* Methode 2: Ich verwende AndroidJavaClass eine Android-Funktion aufzurufen BSSID auf Android Phone als in Unity-Dokument zu erhalten. Weitere Daten zu AndroidJavaClass in Unity und WifiInfo Klasse von Android

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

Ich füge auch android Erlaubnis wifi Zustand zum Lesen von modifing "AndroidManifest.xml" Datei an der Stelle "[Projekt] Standort \ Assets \ Plugins \ Android" mit der Code unter

Da diese Methode Editor nicht funktioniert, ich baue und führe dies auf Android Phone, aber keine Zeichenfolge zurückgegeben wird. Kann mir bitte jemand helfen?

Antwort

0

Sie müssen Plugins erstellen, um dies auf mobilen Geräten zu tun.

Für iOS müssen Sie diese answer in ein Plugin konvertieren und dann von C# aus aufrufen. Es gibt viele Unity iOS-Plugin-Tutorials, die Ihnen dabei helfen können.

Für Android, sollten Sie zunächst check wenn Wifi, bevor man die BSSID mit dem folgenden Code aktiviert ist:

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; 
} 

Vergessen Sie nicht, <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> die Erlaubnis enthalten.

+1

Vielen Dank, es funktioniert jetzt – Lucas1805

Verwandte Themen