2010-06-11 4 views
24

Tethering and Portable Hotspot 설정 항목에서 볼 수 있듯이 Android 2.2 (Froyo)에서 Wi-Fi 핫스팟을 만들기 위해 필요한 API 호출은 무엇입니까?Android 2.2 wifi 핫스팟 API

+0

난 아직 활성화/테 더링을 비활성화에 대한 API가없는 믿을 수로 인정 된 경우

, 그것은 좋은 것입니다. 그것이 존재하기를 희망하지만, 아직 문서화되지 않았습니다. – Sney

+0

문서화 : http://www.androidjavadoc.com/2.3/android/net/wifi/WifiManager.html 공식 API의 일부가 아닙니다. –

답변

42

이 방법 이름 setWifiApEnabled을 찾습니다 WifiManagerWifiManager 선언 방법을 얻을 수있는 반사를 사용하여받은 후 반사 :

를 사용

private boolean setWifiApEnabled(WifiConfiguration wifiConfig, boolean enabled);

호출하고 WifiManager를 통해 호출 할 수 있습니다 객체

이 API는 @hide로 표시되어 있으므로 현재는 직접 사용할 수 없지만 o n WifiManager의 AIDL에 액세스 할 수있게하십시오!

예는 될 수 있습니다

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
Method[] wmMethods = wifi.getClass().getDeclaredMethods(); 
for(Method method: wmMethods){ 
    if(method.getName().equals("setWifiApEnabled")){ 
    WifiConfiguration netConfig = new WifiConfiguration(); 
    netConfig.SSID = "\"PROVAAP\""; 
    netConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); 
    netConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN); 
    netConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA); 
    netConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); netConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); 
    netConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); 
    netConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); 
    netConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); 

    try { 
     method.invoke(wifi, netConfig,true); 
    } catch (IllegalArgumentException e) { 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     e.printStackTrace(); 
    } catch (InvocationTargetException e) { 
     e.printStackTrace(); 
    } 
    } 
} 

그것은 작동하지만 난 내 자신과 현재 구성을 변경하고 활성 AP의 현재 WifiConfiguration 빈 configuration.Why에 나를 운전 점점 수없는 이유는 무엇입니까?

+0

좋은 조사 – Schildmeijer

+0

당신은 항상 반사를 통해 그것들에 접근 할 수 있습니다! –

+0

@ markov00 : 제안 된 방법은 Android SDK의 일부가 아닙니다. 기간을 사용하지 마십시오. – CommonsWare

2

WiFi 핫스팟을 작성하는 API 호출이없는 것 같습니다. - 미안 해요!

4

API 8 이상에서 작동합니다. 나는 심하게 다른 버전을 사용하여 아래 (또는 위), 그리고 같은 문제 markov00에 달려 들어갔다; 휴대용 Wi-Fi AP에 기본 Wi-Fi 구성을로드 할 수 없습니다. 나는 다른 곳에서 해결책을 찾았다. 당신이 솔루션을 좋아한다면이 답

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
Method[] wmMethods = wifi.getClass().getDeclaredMethods(); 

for (Method method: wmMethods){ 
    if (method.getName().equals("setWifiApEnabled")){ 
     try { 
      // just nullify WifiConfiguration to load the default configuration ;) 
      method.invoke(wifi, null, true); 
     } catch (IllegalArgumentException e){ 
      e.printStackTrace(); 
     } catch (IllegalAccessException e){ 
      e.printStackTrace(); 
     } catch (InvocationTargetException e){ 
      e.printStackTrace(); 
     } 
    } 
} 
+0

그래서 현재의 것을 무효화 한 후에 WifiConfig를 수락합니까? – bk138

+0

아니요, 그냥 기본값 인 이미 사용 중 하나를 사용합니다 – slinden77

+0

@dmmh, "method.invoke (wifi, null, true);를 추가하면 true입니다." 사용할 수 있습니다. 그래서 나는 단지 불리언 값을 "거짓"으로 변경하여 그것을 끈다. 켜기/끄기 여부를 현재 상태로 확인하는 것은 어떻습니까? – gumuruh