Приобретите "сетевой" замок, который блокирует Wi-Fi при его использовании, но не при использовании 3G?

В настоящее время у меня есть это в моем коде:

WifiManager.WifiLock wifiLock = ((WifiManager) context
    .getSystemService(Context.WIFI_SERVICE))
    .createWifiLock(WifiManager.WIFI_MODE_FULL, "MyWifiLock");
wifiLock.aquire();

Однако мое приложение использует "любой" тип сети. Когда нет Wi-Fi-соединения, он автоматически использует данные 3G. Есть ли способ как-то оптимизировать этот код, чтобы он блокировал WiFi только в том случае, если он действительно используется? Единственный способ, которым я могу подумать, это изменить приведенный выше код на что-то вроде:

PreferenceManager
    .getDefaultSharedPreferences(getContext())
    .edit()
    .putBoolean(PREF_WIFI_LOCK_NEEDED, true)
    .apply();

и создание некоторого NetworkStateReceiver, который слушает WifiManager.NETWORK_STATE_CHANGED_ACTION и / или ConnectivityManager.CONNECTIVITY_ACTION, передает и как-то передает / снимает блокировку (и, вероятно, сохраняет блокировку на статическом члене моего Приложения?)

Есть ли рекомендуемый способ сделать это?

0 ответов

Другие вопросы по тегам