Wi-Fi Оптимизация

Кто-нибудь знает какой-либо способ включить / отключить оптимизацию Wi-Fi программно с помощью кода или хотя бы проверить, включен ли он (чтобы запросить пользователя)? Когда это включено и устройство переходит в спящий режим (несмотря на блокировку пробуждения и Wi-Fi), связь Wi-Fi со сторонним устройством прекращается.

Спасибо!


person KMLong    schedule 15.08.2014    source источник


Ответы (3)


Устройство должно быть рутировано, чтобы использовать этот метод. Ваше приложение необязательно должно быть системным, поскольку мы можем предоставить себе временный доступ к системному приложению. Это работает в API 21/4.*, не уверен, что еще.

Добавьте <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/> в AndroidManifest.xml

Интернет может сказать вам, что ваше приложение должно быть системным приложением, но вы можете игнорировать это, потому что этот метод решает эту проблему, по крайней мере, в этой ситуации.

Используйте этот код (упрощенный для этого поста).

// Grant your app temporary system level like settings access awesomeness
Runtime.getRuntime().exec("su pm grant <yourpackagename> android.permission.WRITE_SECURE_SETTINGS");
// Read the value first to see if you need to set it at all
int curVal = android.provider.Settings.Global.getInt(getContentResolver(),"wifi_suspend_optimizations_enabled",2);
switch( curVal ) {
  case 0:
    // already disabled
    break;
  case 1:
    // attempt to disable!
    boolean success = android.provider.Settings.Global.putInt(getContentResolver(),"wifi_suspend_optimizations_enabled",0);
    if( success ) {
      // yay worked! maybe check it again to be sure
    }
    else {
      // failed to put
    }
    break;
  case 2:
    // Failed to read value, access not granted
    break;
}

Я получил много из этого: http://muzso.hu/2013/04/07/change-android-system-settings-eg.-airplane-mode-radios-via-commandline-on-root-phone

Метод, описанный в этом ответе, также можно использовать для изменения других параметров защищенной системы, но может быть сложно отследить точное имя параметра, который нужно изменить. Полезная информация доступна по адресу android. -изменение-системных-настроек-корневого-устройства-из-внутри-приложения, а именно то, что вы можете открыть /data/data/com.android.providers.settings/databases/setting‌​s.db в редакторе sqlite по вашему выбору, чтобы найти таблицу и имена ключей параметр, который вы хотите изменить. wifi_suspend_optimizations_enabled находится в глобальной таблице, но это не единственная доступная таблица. Другие настройки, кроме оптимизации Wi-Fi, могут потребовать <uses-permission android:name="android.permission.WRITE_SETTINGS"/>

Эта информация может не относиться ко всем устройствам или ситуациям.

person AlphaCactus    schedule 01.09.2016

На данный момент НЕТ возможности программно проверить опцию оптимизации Wi-Fi.

проверить классы об API Wi-Fi. http://developer.android.com/reference/android/net/wifi/package-summary.html

person jooneyP    schedule 15.08.2014

Через оболочку ADB (при наличии root-доступа):

settings set global wifi_suspend_optimizations_enabled 0

Вы можете проверить, успешно ли это, наблюдая за logcat при выключении и включении экрана:

logcat -v time | grep -e wpa | grep SETSUSPENDMODE

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

person Bradley Forney    schedule 09.02.2018