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.

47
demandé sur mxg 2011-06-18 11:39:33

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

47
répondu Ashish Sahu 2018-08-22 06:20:36

il n'y a pas de méthodes dans le SDK Android concernant la fonctionnalité hotspot WiFi -- désolé!

8
répondu CommonsWare 2011-06-18 12:13:57

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;
       }
      }
}
4
répondu Kerem Kusmezer 2013-05-13 07:12:25

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

2
répondu joshhendo 2011-06-18 12:34:49

cela fonctionne bien pour moi:

WifiConfiguration apConfig = null;
Method method = wifimanager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, Boolean.TYPE);
method.invoke(wifimanager, apConfig, true);
1
répondu Carlyle_Lee 2014-12-03 14:17:44

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 .

1
répondu mahendrakumar patel 2016-02-17 11:26:13

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.

1
répondu Sócrates Costa 2018-01-25 15:25:02

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 .

0
répondu Jon 2018-03-19 05:29:42
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" />

-3
répondu Amel 2012-08-17 15:55:13