Приобретите "сетевой" замок, который блокирует 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, передает и как-то передает / снимает блокировку (и, вероятно, сохраняет блокировку на статическом члене моего Приложения?)
Есть ли рекомендуемый способ сделать это?