Android включает и отключает Wi-Fi HotSpot программно

Существует ли API для включения / выключения Wi-Fi HotSpot на Android программно?

Какие методы следует использовать для включения / выключения?

UPDATE: есть возможность включить HotSpot и просто включить / выключить Wi-Fi, но это не очень хорошее решение для меня.

Используйте следующий class, чтобы изменить / установить параметр 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 

Вы должны добавить разрешения ниже в свой AndroidMainfest:

    

Используйте этот автономный class ApManager из любого места:

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

Надеюсь, это поможет кому-то

В Android SDK нет методов, связанных с функцией Wi-Fi-горячих точек – извините!

Вы можете использовать следующий код, чтобы включить, отключить и запросить прямое состояние wifi программно.

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

Лучше всего будет смотреть на class WifiManager. В частности, setWifiEnabled(bool) .

См. Документацию по адресу: http://developer.android.com/reference/android/net/wifi/WifiManager.html#setWifiEnabled(boolean)

Учебник о том, как его использовать (включая необходимые разрешения), можно найти здесь: http://www.tutorialforandroid.com/2009/10/turn-off-turn-on-wifi-in-android-using.html

Это хорошо работает для меня:

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

Я публикую неофициальные api для того же, он содержит больше, чем просто включение on/off hotspot. ссылка

Для DOC- ссылки API.

Для Android 8.0 существует новый API для обработки горячих точек. Насколько я знаю, старый способ с использованием отражения больше не работает. Пожалуйста, обратитесь к:

Разработчики 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) 

Запросите локальную только точку доступа, которую приложение может использовать для связи между совместно расположенными устройствами, подключенными к созданной точке доступа Wi-Fi. В сети, созданной этим методом, не будет доступа к Интернету.

Переполнение стека
Как включить / отключить wifi hotspot программно в Android 8.0 (Oreo)

onStarted (WifiManager.LocalOnlyHotspotReservation резервирование) будет вызываться, если включена горячая точка. Используя ссылку WifiManager.LocalOnlyHotspotReservation, вы вызываете метод close (), чтобы отключить точку доступа.

Относится только к Oreo + …

Я сделал приложение с кодом здесь, на GitHub, который использует reflection и DexMaker, чтобы «добраться до» функциональности WifiManager , которая теперь находится в ConnectionManager , а не WifiManager .

Материал в WifiManager хорош только для закрытой сети Wi-Fi (которая объясняет бит Closed в именах classов!).

Больше объяснений https://stackoverflow.com/a/49356255/772333 .

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

где статус может быть true или false

добавить манифест разрешения:

  • Как рассчитать расстояние от Wifi-маршрутизатора, используя силу сигнала?
  • Точка доступа Wi-Fi с учетной записью
  • В гостевой сети Windows 7 используется один адаптер для приема и второй адаптер для создания хост-сети
  • Как использовать двухдиапазонную карту Wi-Fi для одновременного подключения к 5 ГГц и 2,4 ГГц в Windows?
  • Могу ли я изменить владельца группы в постоянной группе в Wi-Fi Direct?
  • Java получает мой IP-адрес
  • Может ли Android сделать одноранговую сеть ad-hoc?
  • Как использовать CaptiveNetwork для получения текущего имени точки доступа Wi-Fi
  • Как избежать задержки в сообщениях Android GCM / изменении сердечного ритма
  • Широковещательный приемник для проверки подключения к Интернету в приложении Android
  • Почему Wi-Fi-соединение на моем смартфоне работает лучше, чем одно соединение на моем ноутбуке?
  • Давайте будем гением компьютера.