EASY 방법 :
WifiConfiguration
첫 번째 인스턴스보십시오 :
// to set SSID
wifiConfiguration.Set("SSID", meSSID); // string
wifiConfiguration.Set("preSharedKey", mePassword); // string
:
AndroidJavaObject wifiConfiguration = new AndroidJavaClass("android.net.wifi.WifiConfiguration");
지금이 객체 내에서 필드를 얻을 메소드를 호출 및/설정할 수 있습니다 필요한 필드를 모두 설정 한 후에로 전화하면됩니다.방법 :
wifiManager.Call<bool>("setWifiApEnabled", wifiConfiguration, enabled);
어쩌면이 두 가지보다 더 많은 필드를 설정해야합니다 있지만 source을 확인하고 setWifiApEnabled
방법은 internaly 무엇을 확인해야합니다 확인 할 수 있습니다.
HARD 방법 :
당신이 모든 객체를 처리하는 것을 기억해야하기 때문에 조금 까다로울 수있다 AndroidJavaObject
과 반사를 사용 (사용 반사 코드)
.
이 WifiConfiguration
// android code for that should look like :
// wifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class);
// but in Unity C# you have to split this into few chunks:
// 1. Get calling class :
using (AndroidJavaObject classObj = wifiManager.Call<AndroidJavaObject>("getClass"))
{
// classObj should contains your class object
// 2. call get WifiConfiguration class details :
using (AndroidJavaObject wifiConfiguration = new AndroidJavaObject("setWifiApEnabled"))
{
// 3. Fill that object :
wifiConfiguration.Set("SSID", meSSID); // string
wifiConfiguration.Set("preSharedKey", mePassword); // string
// 4. Get WifiConfiguration class definition
using (AndroidJavaObject wifiCfgClass = wifiConfiguration.Call<AndroidJavaObject>("getClass"))
{
// 5. Get boolean definition
using (AndroidJavaObject booleanObj = new AndroidJavaObject("java.lang.Boolean"))
{
using (AndroidJavaObject booleanClass = booleanObj.Call<AndroidJavaObject>("getClass"))
// 6. Get method definition
using (AndroidJavaObject methodObj = classObj.Call<AndroidJavaObject>("getMethod", "setWifiApEnabled", wifiCfgClass , booleanClass)
{
// 7. Call that method :)
methodObj.Call("invoke", wifiManager, wifiConfiguration, enabled);
}
}
}
}
}
을 :이
나는 위의 코드가 작동하지 않을 이유를 찾기 위해 노력했지만 나를 위해 괜찮 작업했다가 (테스트 그래서 처음부터
일부 가상 머신 및 Samsung Galaxy S5 Neo).
(거의 자정에 알았습니다)은 암호입니다. 대한 WPA-PSK
은 또한 WPA-PSK (사전 공유 키) 모드로 언급 된 부분에 this wikipedia article에 따르면
이는 가정 및 소규모 사무실 네트워크 용으로 설계되어 필요하지 않습니다 인증 서버. [9] 각 무선 네트워크 장치는 256 비트 키를 사용하여 네트워크 트래픽을 암호화합니다. 이 키는 64 자리 16 진수의 문자열 또는 8 ~ 63 자의 인쇄 가능한 ASCII 문자의 암호로 입력 할 수 있습니다. [10] ASCII 문자를 사용하는 경우 256 비트 키는 소금으로 SSID를 사용하고 HMAC-SHA1을 4096 반복하여 PBKDF2 키 유도 함수를 암호문에 적용하여 계산합니다.[11] WPA 개인 모드는 WPA와 WPA2를 모두 사용할 수 있습니다.)
내 제안이 유효 확실하게 위의 링크 된 기사에서와 동일한 암호를 사용하는 것입니다.
또 다른 주목할 점은 SSID 부분이 짧지 만 좋은 설명 here on wikipedia입니다.
일반적인 잘못된 가정이기는하지만, SSID를가 NUL 문자로 종료 사람이 읽을 수있는 문자 (ASCII와 같은)의 문자열 (A C-문자열로) 것입니다. SSID를가 그들이 무엇으로 취급하고 처리해야합니다, 제가 확인한 바로는
사람이 읽을 수 없습니다 일부 0-32 옥텟의 순서는 당신이 할 필요가 없습니다 당신을 NULL로 종료 문자열은 Java 또는 C#에서 고유 코드에 의해 처리되지만 여전히 31자를 초과해서는 안되기 때문에 (32 자 수가 널 문자가됩니다). 5260305714217573
당신은 매우 가까웠다 :
나는 이것을 확인. 매개 변수가 약간 잘못되었습니다. 질문을 확인하십시오. – ProgrammerSSID : MeHotSpot
WPA-PSK
@Programmer ** 이것은 중복되지 않습니다 **. OP는 WiFi가 아닌 핫스팟 (AP) 켜는 것에 대해 질문했습니다. –
제 잘못입니다. 핫스팟 부분을 보지 못했습니다. – Programmer