2016-09-19 8 views
0

AndroidおよびiOS端末のUnity Game Appで、BSSID(デバイスのMACアドレスではなく、接続しているWi-FiルーターのMACアドレス)を取得するにはどうすればよいですか?wifiのBSSIDを取得する方法Unityに接続しようとしています(C#)?

私はこれらの方法を試しましたが、それらのどれも動作していません。ゲームの場面に印刷して結果を確認します。方法1 *

を助けてください:このコードは正常に動作し、正しいBSSID情報を取得するが、それは唯一のエディタ上で動作しています、私はそれが動作していないのAndroidアプリケーションにそれを構築する場合、返される文字列は何も(nullではないが、空の値ではありません)。

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:私はユニティ文書のようにAndroid携帯上のBSSIDを取得するにはAndroidの機能を呼び出すためにAndroidJavaClassを使用しています。ユニティでAndroidJavaClassとAndroid

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

についての詳細情報私はまたして、「[プロジェクトの場所] \資産\プラグイン\ Androidの」場所に「のAndroidManifest.xml」ファイルを・修正により、無線LANの状態を読み取るためのアンドロイド権限を追加以下のコード

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

このメソッドはエディタでは機能しないため、Android Phoneでビルドして実行しますが、文字列は返されません。誰でも私を助けてくれますか?

答えて

0

モバイルデバイスでこれを行うには、プラグインを作成する必要があります。

iOSの場合は、answerをプラグインに変換してからC#から呼び出す必要があります。 Unity iOSのプラグインのチュートリアルが多数あります。 Android用

は、あなたが最初にすべきcheck無線LANは、以下のコードで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

関連する問題