2016-09-19 1 views
0

Comment puis-je obtenir BSSID (adresse MAC du routeur Wi-Fi auquel je me connecte, pas mon adresse MAC de l'appareil) dans mon application de jeu Unity sur téléphone Android et iOS?Comment obtenir BSSID de wifi je me connecte à dans Unity (C#)?

J'ai essayé cette méthode mais aucune d'entre elles ne fonctionne. Je vérifie le résultat en l'imprimant sur la scène du jeu. S'il vous plaît aider

* Méthode 1: Ce travail Code fin et obtenir les informations BSSID correct mais il fonctionne uniquement sur la rédaction, quand je construis à Android App il ne fonctionne pas, la chaîne de retour est rien (non nulle, mais la valeur vide).

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

* Méthode 2: J'utilise AndroidJavaClass d'appeler une fonction android pour obtenir BSSID sur Android Phone comme dans le document Unity. En savoir plus sur AndroidJavaClass dans l'unité et WifiInfo classe d'Android

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

J'ajouter aussi la permission Android pour lire l'état wifi par modifing fichier "AndroidManifest.xml" à l'endroit "[Emplacement du projet] \ Assets \ Plugins \ Android" avec le code ci-dessous

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

Depuis cette méthode ne fonctionne pas sur l'éditeur, je compile et exécute ceci sur Android Phone, mais aucune chaîne n'est de retour. Quelqu'un peut-il m'aider s'il-vous-plaît.

Répondre

0

Vous avez besoin de faire des plugins pour faire cela sur les appareils mobiles.

Pour iOS, vous devez convertir ce answer en un plugin puis l'appeler depuis C#. Il existe de nombreux tutoriels de plugin Unity iOS qui peuvent vous aider à démarrer.

Pour Android, vous devez d'abord check si Wifi est activé avant d'obtenir le BSSID avec le code ci-dessous:

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

Ne pas oublier d'inclure l'autorisation <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />.

+1

Merci beaucoup ça marche maintenant – Lucas1805