Android 2.2 wifi hotspot API


¿Cuál es la llamada a la 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 conexión y punto de acceso portátil).

Author: Thomas, 2010-06-11

3 answers

Puedes llamar

private boolean setWifiApEnabled(WifiConfiguration wifiConfig, boolean enabled);

Usando reflexión:)

Después de obtener el WifiManager use la reflexión para obtener los métodos declarados WifiManager, busque este nombre de método setWifiApEnabled e invóquelo a través del objeto WifiManager

Estas API están marcadas como @hide, por lo que actualmente no puede usarlas directamente, pero aparecen en el AIDL para el WifiManager 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 puedo cambiar la configuración actual con mi propio, y obtener la configuración actual de Wific de un AP activo me conduce a una configuración vacía.¿Por qué?

 42
Author: markov00,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-20 15:15:05

Esto funciona en API 8 y superiores. Utilizo una versión muy diferente a la siguiente (o superior), y se estaba ejecutando en el mismo problema markov00 se encontró; no ser capaz de cargar la configuración predeterminada de Wific para el AP Wi-Fi 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();
        }
    }
}
 4
Author: slinden77,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-31 20:23:41

No parece haber una llamada API para crear un punto de acceso WiFi sorry ¡Lo siento!

 2
Author: CommonsWare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-26 03:54:33