por para otro internet compartir como celular app android wifi android-wifi

para - Android activa/desactiva WiFi HotSpot mediante programación



compartir wifi android (9)

Esto funciona bien para mi:

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

¿Hay una API para activar / desactivar el WiFi HotSpot en Android mediante programació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í.


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

Para API''s DOC - link .


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


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 pila
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.


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



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://.com/a/49356255/772333 .


Use la clase a continuación para cambiar / verificar la configuración del punto de acceso Wifi:

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:

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

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


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: <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />