2

Я разработал приложение, использующее широковещательный приемник Wifi. Мое требование - получить вызов функции, когда Wi-Fi подключен к маршрутизатору, получив IP-адрес, а также вызовет другую функцию, когда Wi-Fi отключен от ранее подключенного маршрутизатора.широковещательный приемник wifi несколько намерений

Я использовал это в Manifest

<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 Но когда я проверить это с версии леденец по вызову много раз Receive для.

Когда я включаю свой Wi-Fi на его результате, как Состояние: Idle --Connecting-- удостовер - Пленница Check - Connected - Connected. Иногда также отключен.

при выключении. Connected - Отключен - Разъединение - Разъединение - Разъединение

отладочной результат 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 отключен Подключено состояние, а затем 4-5 Состояние отключено.

Я использовал телефон HTC для тестирования.

Я использовал простую кодировку, должен ли я получить более глубокое условие для проверки этого? (Подробное состояние и т. Д.)

Каков наилучший способ решения этого решения?

+0

Благодарим за изменение и исправление –

ответ

3

Когда вы используете фильтр намерений android.net.wifi.STATE_CHANGE, он будет запускать широковещательный приемник несколько раз. Например, если вы включаете Wi-Fi, то onreceive трансляции будет вызывать несколько раз в любом месте от 1 до 5 раз. Таким образом, он даст вам несколько NetworkInfo.State.CONNECTED и тот же с отключенным.

Поэтому, если вы хотите иметь только один подключенный или отключенный, то вывод означает просто использовать булевский флаг и правильно установить его таким образом, чтобы при первом включении Wi-Fi это означало, что он должен игнорировать оставшиеся wifi-соединения и аналогично отключен Wi-Fi.

+0

** спасибо ** за ответ Sivateja.koppineedi –