2016-09-19 3 views
0

안드로이드 및 iOS 전화의 Unity Game App에서 BSSID (연결하는 무선 라우터의 MAC 주소, 내 장치 MAC 주소가 아님)를 얻으려면 어떻게해야합니까?wifi의 BSSID를 얻는 방법 Unity에 연결 중입니다 (C#)?

나는이 방법을 시도했지만 아무도 작동하지 않습니다. 게임 장면에 인쇄하여 결과를 확인합니다. 도와주세요

* 방법 1 : *이 코드는 제대로 작동하고 올바른 BSSID 정보를 얻지 만 편집기에서 작동합니다. 작동하지 않으면 안드로이드 응용 프로그램에 빌드 할 때 반환 문자열은 아무 것도 아닙니다 (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 : 나는 유니티 문서의 안드로이드 전화에 BSSID를 얻기 위해 안드로이드 함수를 호출 할 AndroidJavaClass을 사용하고 있습니다. 유니티에서 AndroidJavaClass
string mac = ""; 
AndroidJavaClass jc = new AndroidJavaClass("android.net.wifi.WifiInfo"); 
mac = jc.Call<string>("getBSSID"); 

안드로이드

WifiInfo 클래스에 대한 자세한 정보는 또한으로 "AndroidManifest.xml에"위치에 파일 "[프로젝트 위치] \ 자산 \ 플러그인 \ 안드로이드를"modifing에 의해 무선 랜 상태를 읽기 위해 안드로이드 권한을 추가 아래 코드

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

이 방법은 Editor에서 작동하지 않으므로 Android Phone에서 빌드하고 실행하지만 문자열은 반환되지 않습니다. 누구든지 제발 도와 줄 수 있어요.

답변

0

휴대 기기에서 플러그인을 만들려면 플러그인을 만들어야합니다.

iOS의 경우이 answer을 플러그인으로 변환 한 다음 C#에서 호출해야합니다. 거기에 많은 Unity iOS 플러그인 자습서가 있습니다. 안드로이드에 대한

가 먼저해야 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

관련 문제