Android activa / desactiva WiFi HotSpot mediante progtwigción

¿Hay una API para activar / desactivar el WiFi HotSpot en Android mediante progtwigción?

¿A qué métodos debo llamar para activarlo / desactivarlo?

ACTUALIZACIÓN: Hay esta opción para habilitar el HotSpot y activar / desactivar el WiFi, pero esta no es una buena solución para mí.

Use la clase a continuación para cambiar / verificar la configuración del Wifi hotspot :

 import android.content.*; import android.net.wifi.*; import java.lang.reflect.*; public class ApManager { //check whether wifi hotspot on or off public static boolean isApOn(Context context) { WifiManager wifimanager = (WifiManager) context.getSystemService(context.WIFI_SERVICE); try { Method method = wifimanager.getClass().getDeclaredMethod("isWifiApEnabled"); method.setAccessible(true); return (Boolean) method.invoke(wifimanager); } catch (Throwable ignored) {} return false; } // toggle wifi hotspot on or off public static boolean configApState(Context context) { WifiManager wifimanager = (WifiManager) context.getSystemService(context.WIFI_SERVICE); WifiConfiguration wificonfiguration = null; try { // if WiFi is on, turn it off if(isApOn(context)) { wifimanager.setWifiEnabled(false); } Method method = wifimanager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class); method.invoke(wifimanager, wificonfiguration, !isApOn(context)); return true; } catch (Exception e) { e.printStackTrace(); } return false; } } // end of class 

Debes agregar los permisos a continuación a tu AndroidMainfest:

    

Utilice esta clase independiente de ApManager desde cualquier lugar de la siguiente manera:

 ApManager.isApOn(YourActivity.this); // check Ap state :boolean ApManager.configApState(YourActivity.this); // change Ap state :boolean 

Espero que esto ayude a alguien

No hay métodos en el SDK de Android relacionados con la función de punto de acceso WiFi, ¡lo siento!

Puede usar el siguiente código para habilitar, deshabilitar y consultar el estado de wifi directo programáticamente.

 package com.kusmezer.androidhelper.networking; import java.lang.reflect.Method; import com.google.common.base.Preconditions; import android.content.Context; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiManager; import android.util.Log; public final class WifiApManager { private static final int WIFI_AP_STATE_FAILED = 4; private final WifiManager mWifiManager; private final String TAG = "Wifi Access Manager"; private Method wifiControlMethod; private Method wifiApConfigurationMethod; private Method wifiApState; public WifiApManager(Context context) throws SecurityException, NoSuchMethodException { context = Preconditions.checkNotNull(context); mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); wifiControlMethod = mWifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class,boolean.class); wifiApConfigurationMethod = mWifiManager.getClass().getMethod("getWifiApConfiguration",null); wifiApState = mWifiManager.getClass().getMethod("getWifiApState"); } public boolean setWifiApState(WifiConfiguration config, boolean enabled) { config = Preconditions.checkNotNull(config); try { if (enabled) { mWifiManager.setWifiEnabled(!enabled); } return (Boolean) wifiControlMethod.invoke(mWifiManager, config, enabled); } catch (Exception e) { Log.e(TAG, "", e); return false; } } public WifiConfiguration getWifiApConfiguration() { try{ return (WifiConfiguration)wifiApConfigurationMethod.invoke(mWifiManager, null); } catch(Exception e) { return null; } } public int getWifiApState() { try { return (Integer)wifiApState.invoke(mWifiManager); } catch (Exception e) { Log.e(TAG, "", e); return WIFI_AP_STATE_FAILED; } } } 

Su mejor apuesta será mirar la clase de WifiManager. Específicamente la función setWifiEnabled(bool) .

Consulte la documentación en: http://developer.android.com/reference/android/net/wifi/WifiManager.html#setWifiEnabled(boolean)

Puede encontrar un tutorial sobre cómo usarlo (incluidos los permisos que necesita) aquí: http://www.tutorialforandroid.com/2009/10/turn-off-turn-on-wifi-in-android-using.html

Esto funciona bien para mi:

 WifiConfiguration apConfig = null; Method method = wifimanager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, Boolean.TYPE); method.invoke(wifimanager, apConfig, true); 

He publicado api no oficiales para el mismo, contiene algo más que activar on/off hotspot. enlazar

Para API’s DOC – link .

Para Android 8.0, hay una nueva API para manejar Hotspots. Hasta donde yo sé, la vieja forma de usar la reflexión ya no funciona. Por favor refiérase a:

Desarrolladores de Android https://developer.android.com/reference/android/net/wifi/WifiManager.html#startLocalOnlyHotspot(android.net.wifi.WifiManager.LocalOnlyHotspotCallback,%20android.os.Handler)

 void startLocalOnlyHotspot (WifiManager.LocalOnlyHotspotCallback callback, Handler handler) 

Solicite un punto de acceso local único que una aplicación pueda usar para comunicarse entre dispositivos compartidos conectados al punto de acceso WiFi creado. La red creada con este método no tendrá acceso a Internet.

Desbordamiento de stack
Cómo activar / desactivar wifi hotspot programmatically en Android 8.0 (Oreo)

Se llamará al método onStarted (WifiManager.LocalOnlyHotspotReservation reservation) si el punto de acceso está activado. Usando la referencia de WifiManager.LocalOnlyHotspotReservation se llama al método close () para apagar el punto de acceso.

Se aplica solo a Oreo …

Hice una aplicación con código aquí en GitHub que usa reflexión y DexMaker para ‘obtener’ la funcionalidad de conexión de Oreo, que ahora está en ConnectionManager , en lugar de WifiManager .

Las cosas en WifiManager son buenas solo para una red wifi cerrada (¡lo cual explicaba el bit Cerrado en los nombres de las clases!).

Más explicación https://stackoverflow.com/a/49356255/772333 .

 WifiManager wifiManager = (WifiManager)this.context.getSystemService(Context.WIFI_SERVICE); wifiManager.setWifiEnabled(status); 

donde el estado puede ser true o false

agregar el manifiesto de permiso: