1

Android および iOS 電話の Unity ゲームアプリで BSSID (デバイスの MAC アドレスではなく、接続している Wi-Fi ルーターの MAC アドレス) を取得するにはどうすればよいですか?

これらの方法を試してみましたが、どれもうまくいきませんでした.ゲームシーンに印刷して結果を確認します. 助けてください

*方法 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: AndroidJavaClass を使用して Android 関数を呼び出し、Unity ドキュメントのように Android Phone で BSSID を取得しています。Unity のAndroidJavaClassと Android のWifiInfoクラスに関する詳細情報

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

また、場所「[Project Location]\Assets\Plugins\Android」にある「AndroidManifest.xml」ファイルを以下のコードで変更することにより、wifi 状態を読み取るための Android アクセス許可を追加します。

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

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

4

2 に答える 2

1

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

iOS の場合、この回答をプラグインに変換してから C# から呼び出す必要があります。これを始めるための Unity iOS プラグインのチュートリアルがたくさんあります。

Android の場合、以下のコードで BSSID を取得する前に、まず Wifi が有効になっているかどうかを確認する必要があります。

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" />

于 2016-09-19T07:54:35.667 に答える