Android Activer / Désactiver WiFi HotSpot programmatique
Existe-t-il une API pour activer/désactiver le HotSpot WiFi sur Android par programmation?
quelles méthodes dois-je utiliser pour L'allumer/L'éteindre?
mise à jour: il y a cette option pour avoir le HotSpot activé, et juste allumer/éteindre le WiFi, mais ce n'est pas une bonne solution pour moi.
9 réponses
utilisez la classe ci-dessous pour changer/vérifier le réglage 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
vous devez ajouter les permissions ci-dessous à votre 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" />
utilisez cette classe autonome ApManager de n'importe où comme suit:
ApManager.isApOn(YourActivity.this); // check Ap state :boolean
ApManager.configApState(YourActivity.this); // change Ap state :boolean
Espère que cela va aider quelqu'un
il n'y a pas de méthodes dans le SDK Android concernant la fonctionnalité hotspot WiFi -- désolé!
vous pouvez utiliser le code suivant pour activer, désactiver et interroger l'état wifi direct de façon programmatique.
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;
}
}
}
votre meilleur pari sera de regarder la classe WifiManager. Spécifiquement la fonction setWifiEnabled(bool)
.
voir la documentation à: http://developer.android.com/reference/android/net/wifi/WifiManager.html#setWifiEnabled (booléen)
Un tutoriel sur la façon de l'utiliser (y compris les autorisations dont vous avez besoin) peut être trouvé ici: http://www.tutorialforandroid.com/2009/10/turn-off-turn-on-wifi-in-android-using.html
cela fonctionne bien pour moi:
WifiConfiguration apConfig = null;
Method method = wifimanager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, Boolean.TYPE);
method.invoke(wifimanager, apConfig, true);
j'ai publié des api non officielles pour le même, il contient plus que juste un tour hotspot on/off
. lien
pour DOC API - link .
pour Android 8.0, il y a une nouvelle API pour gérer les Hotspots. Pour autant que je sache, l'ancienne façon d'utiliser la réflexion ne fonctionne plus. Prière de se référer à:
Développeurs 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)
demande un point d'accès local seulement qu'un application peut utiliser pour communiquer entre les appareils co-localisés connectés au point D'accès WiFi créé. Le réseau créé par cette méthode n'aura pas accès à Internet.
Stack Overflow
Comment faire pour activer/désactiver le hotspot wifi par programmation dans Android 8.0 (Oreo)
onStarted(WifiManager.La méthode LocalOnlyHotspotReservation reservation) sera appelée si hotspot est tourné sur.. En Utilisant WifiManager.LocalOnlyHotspotReservation de référence vous appelez la méthode close() pour désactiver le hotspot.
S'applique à Oreo+ seulement...
j'ai fait une application avec le code ici sur GitHub qui utilise la réflexion et DexMaker pour" obtenir à "la fonctionnalité de attache D'Oreo, qui est maintenant dans ConnectionManager
, plutôt que WifiManager
.
le truc dans WifiManager
est bon seulement pour un réseau wifi fermé (qui a expliqué le bit fermé dans les noms de classe!).
Plus d'explications https://stackoverflow.com/a/49356255/772333 .
WifiManager wifiManager = (WifiManager)this.context.getSystemService(Context.WIFI_SERVICE);
wifiManager.setWifiEnabled(status);
où le statut peut être true
ou false
ajouter le manifeste de permission: <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />