Есть ли API для программного включения / выключения Wi-Fi HotSpot на Android?
Какие методы я должен вызвать, чтобы включить его / Off?
ОБНОВЛЕНИЕ: Есть возможность включить HotSpot и просто включить / выключить WiFi, но для меня это не очень хорошее решение.
Вот полное решение, если Вы хотите реализовать опцию точки доступа Wi-Fi программно в Вашем приложении для Android.
РЕШЕНИЕ ДЛЯ API < 26:
Для устройств < API 26. Нет никакого общедоступного API Android с этой целью. Так, для работы с теми API, необходимо получить доступ к частным API до [1 133] отражение . Не рекомендуется, но если Вы не имеете никакие другие опции в запасе, затем вот прием.
, В первую очередь, у Вас должно быть это разрешение в Вашей декларации,
<uses-permission
android:name="android.permission.WRITE_SETTINGS"
tools:ignore="ProtectedPermissions"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
Вот то, как можно спросить это относительно времени выполнения:
private boolean showWritePermissionSettings() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
&& Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
if (!Settings.System.canWrite(this)) {
Log.v("DANG", " " + !Settings.System.canWrite(this));
Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_WRITE_SETTINGS);
intent.setData(Uri.parse("package:" + this.getPackageName()));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(intent);
return false;
}
}
return true; //Permission already given
}
можно затем получить доступ setWifiEnabled
метод посредством отражения. Это возвращает true, если действие, которое Вы попросили, является процессом правильно т.е. позволяет/запрещает горячую точку.
public boolean setWifiEnabled(WifiConfiguration wifiConfig, boolean enabled) {
WifiManager wifiManager;
try {
if (enabled) { //disables wifi hotspot if it's already enabled
wifiManager.setWifiEnabled(false);
}
Method method = wifiManager.getClass()
.getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class);
return (Boolean) method.invoke(wifiManager, wifiConfig, enabled);
} catch (Exception e) {
Log.e(this.getClass().toString(), "", e);
return false;
}
}
можно также получить wificonfiguration горячей точки посредством отражения. Я имею , ответил что метод для этого вопроса на StackOverflow.
P.S.: Если Вы не хотите включать горячую точку программно, можно запустить этот намерение и открыть экран настроек Wi-Fi для пользователя для включения ее вручную.
РЕШЕНИЕ ДЛЯ API> = 26:
Наконец, андроид выпустил официальный API для версий> = Oreo. Можно просто использовать общественность, подвергнутую API андроидом т.е. startLocalOnlyHotspot
, Это включает локальную горячую точку без доступа в Интернет. Который таким образом может использоваться для хостинга файлов передачи или сервера.
Это требует Manifest.permission.CHANGE_WIFI_STATE
и ACCESS_FINE_LOCATION
полномочия.
Вот простой пример того, как можно включить горячую точку с помощью этого API.
private WifiManager wifiManager;
WifiConfiguration currentConfig;
WifiManager.LocalOnlyHotspotReservation hotspotReservation;
метод для включения горячей точки:
@RequiresApi(api = Build.VERSION_CODES.O)
public void turnOnHotspot() {
wifiManager.startLocalOnlyHotspot(new WifiManager.LocalOnlyHotspotCallback() {
@Override
public void onStarted(WifiManager.LocalOnlyHotspotReservation reservation) {
super.onStarted(reservation);
hotspotReservation = reservation;
currentConfig = hotspotReservation.getWifiConfiguration();
Log.v("DANG", "THE PASSWORD IS: "
+ currentConfig.preSharedKey
+ " \n SSID is : "
+ currentConfig.SSID);
hotspotDetailsDialog();
}
@Override
public void onStopped() {
super.onStopped();
Log.v("DANG", "Local Hotspot Stopped");
}
@Override
public void onFailed(int reason) {
super.onFailed(reason);
Log.v("DANG", "Local Hotspot failed to start");
}
}, new Handler());
}
`
Вот то, как можно получить детали локально созданной горячей точки
private void hotspotDetaisDialog()
{
Log.v(TAG, context.getString(R.string.hotspot_details_message) + "\n" + context.getString(
R.string.hotspot_ssid_label) + " " + currentConfig.SSID + "\n" + context.getString(
R.string.hotspot_pass_label) + " " + currentConfig.preSharedKey);
}
, Если она бросает, исключение безопасности даже после предоставления необходимых полномочий затем, необходимо попытаться включить местоположение с помощью GPS. Вот решение .
Недавно, я разработал демонстрационное приложение, названное Spotserve. Это включает точку доступа Wi-Fi для всех устройств с API> =15 и размещает демонстрационный сервер на той горячей точке. Можно проверить это на большее количество деталей.Надеюсь, это поможет!