2010-06-11 22 views
24

¿Cuál es la llamada de API que necesito hacer en Android 2.2 (Froyo) para crear un punto de acceso Wifi (como se ve en el elemento de configuración de Hotspot y anclaje portátil).Android 2.2 wifi punto de acceso API

+0

Todavía no puedo creer que no hay una API para activar/desactivar la inmovilización. Espero que exista, pero aún no está documentado. – Sney

+0

Está documentado: http://www.androidjavadoc.com/2.3/android/net/wifi/WifiManager.html Simplemente no forma parte de la API oficial. –

Respuesta

42

Puede llamar

private boolean setWifiApEnabled(WifiConfiguration wifiConfig, boolean enabled);

utilizando la reflexión :)

después de recibir la WifiManager utilizan la reflexión para obtener los WifiManager métodos declarados, busque este nombre de método setWifiApEnabled e invocar a través de la WifiManager objeto

Estas API están marcadas como @hide, por lo que actualmente no puede usarlas directamente, pero aparecen o ¡n la AIDL para el Administrador de Wifi para que sean accesibles!

Un ejemplo puede ser:

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(); 
    } 
    } 
} 

Funciona pero no puede cambiar la configuración actual con la mía, y conseguir el WifiConfiguration actual de un punto de acceso activo me llevara a un configuration.Why vacío?

+0

buena investigación – Schildmeijer

+0

¡Siempre puede acceder a ellos a través de la reflexión! –

+0

@ markov00: su enfoque sugerido no es parte del SDK de Android. No lo use, punto. – CommonsWare

2

Parece que no hay una llamada API para crear un punto de acceso WiFi, ¡lo siento!

4

esto funciona en API 8 y superior. Utilizo una versión muy diferente, luego esta a continuación (o superior), y me encontré con el mismo problema con el que se encontró markov00; no ser capaz de cargar la Configuración wifi predeterminada para el Wi-Fi AP portátil. Encontré una solución en otro lugar.

Si te gusta la solución, sería bueno si esto fue aceptado como una respuesta

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

Entonces, después de anular el actual ¿acepta su WifiConfig? – bk138

+0

no, pero solo usa el valor predeterminado, ya está configurado – slinden77

+0

@dmmh, es cierto al agregar "method.invoke (wifi, null, true);" está habilitado y entonces solo cambio los valores booleanos en "falso" para apagarlo? ¿Qué hay para verificar su estado actual si está activado/desactivado? – gumuruh

Cuestiones relacionadas