Я разработал приложение, использующее широковещательный приемник Wi-Fi. Мое требование - получить вызов функции, когда Wi-Fi подключен к маршрутизатору, получив IP-адрес, а также вызвать другую функцию, когда Wi-Fi отключен от ранее подключенного маршрутизатора.
Я использовал это в манифесте
<action android:name="android.net.wifi.STATE_CHANGE" />
для регистрации широковещательного приемника.
и в классе Broadcast Receiver в OnReceive
:
NetworkInfo networkInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
NetworkInfo.State state = networkInfo.getState();
if (state == NetworkInfo.State.CONNECTED) {
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo wi = wifiManager.getConnectionInfo();
Log.e("++++WiFi Conected","++++WiFi Conected");
Flags.wifiState = true;
updateWifiSyncTrue(context);
if (wi.getIpAddress() != 0) {
intent = new Intent(context, ConnectionService.class);
intent.putExtra("intentValue", "signalOn");
intent.putExtra("bssId", wi.getBSSID());
context.startService(intent);
}
}
if (state == NetworkInfo.State.DISCONNECTED) {
Log.e("++++WiFi DisConected","++++WiFi DisConnected");
Flags.wifiState = false;
updateWifiSyncFalse(context);
updateRouterSyncFalse(context);
intent = new Intent(context, ConnectionService.class);
intent.putExtra("intentValue", "signalOff");
context.startService(intent);
}
Все работало до KitKat Но когда я проверял это с версией леденца, On Receive вызывал много раз.
Когда я включаю Wi-Fi, в результате отображается Состояние: Неактивен --Подключение-- Аутентификация -- Проверка захвата -- Подключено -- Подключено . Иногда также отключается.
при выключении. Подключен -- Отключен -- Отключен -- Отключен -- Отключен
Результат отладки NetworkInfo
выглядит следующим образом:
[type: WIFI[], state: CONNECTING/CONNECTING, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false]
[type: WIFI[], state: CONNECTING/AUTHENTICATING, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false]
[type: WIFI[], state: CONNECTING/AUTHENTICATING, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false]
[type: WIFI[], state: CONNECTING/CONNECTING, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false]
[type: WIFI[], state: CONNECTING/OBTAINING_IPADDR, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false]
[type: WIFI[], state: CONNECTING/CAPTIVE_PORTAL_CHECK, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false]
[type: WIFI[], state: CONNECTING/CAPTIVE_PORTAL_CHECK, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false]
[type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false]
[type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: "DJ Hostspot", roaming: false, failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false].
Убедительно прошу помочь мне в том же. Используя мой код, когда Wi-Fi включен, состояние CONNECTED
выполняется несколько раз, а также состояние DISCONNECTED
.
И когда WIFI выключен, генерируется состояние Connected, а затем 4-5 Disconnected State.
Я использовал телефон HTC для тестирования.
Я использовал простое кодирование. Должен ли я получить более глубокую проверку условий для этого? (Подробное состояние и т.д...)
Каков наилучший способ справиться с этим решением?