андроид.чистая.беспроводной доступ в интернет.Изменение состояния: не срабатывает на WiFi отключить

нормально ли иметь только намерение трансляции с действием NETWORK_STATE_CHANGED_ACTION (постоянное значение которого android.net.wifi.STATE_CHANGE) когда соединение Wifi возвращается? Т. е. Я не понимаю этого намерения, когда Wifi отключается.

обновление: мне в основном интересно >= 2.2 Froyo

2 ответов


public static final String SUPPLICANT_CONNECTION_CHANGE_ACTION

Since: API Level 1

трансляции intent действие, указывающее, что соединение с проситель был установлен (и теперь можно выполнить Операции Wi-Fi) или подключение к проситель потерян. Один extra предоставляет состояние соединения как логическое, где true означает CONNECTED.

См. Также

EXTRA_SUPPLICANT_CONNECTED

постоянное значение: "для Андроид.чистая.беспроводной доступ в интернет.молельщик.CONNECTION_CHANGE"

в API android говорится, что не рекомендуется проверять STATE_CHANGE для сетевого подключения, и вместо этого вы должны использовать SUPPLICANT_CONNECTION_CHANGE_ACTION. это заметит учреждение в сети wifi, и отключение сети wifi. Не знаю, поможет ли вам это, но надеюсь. ссылке


у меня была аналогичная потребность в моем проекте и в конечном итоге пришлось использовать оба.

андроид.сеть.wifi.проситель.CONNECTION_CHANGE действие отправляет трансляцию, когда сеть подключена, но обычно до устройства имеет IP-адрес, поэтому мне нужен android.сеть.wifi.Действие STATE_CHANGE для этого.

андроид.сеть.wifi.Действие STATE_CHANGE получает трансляцию при отключении, только если устройство отключается от сети, но wifi все еще включен (когда точка доступа выходит за пределы диапазона, например)

поэтому вы должны поместить оба действия для получателя в манифест:

<receiver android:name="net.moronigranja.tproxy.WifiReceiver">
            <intent-filter>
                    <action android:name="android.net.wifi.STATE_CHANGE"/>
                    <action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE" />
            </intent-filter>
</receiver>

и вы ставите if, чтобы проверить, какое действие вызывается в намерении. Вот метод onReceive BroadcastReceiver в моем коде:

public void onReceive(Context c, Intent intent) {
      if(intent.getAction().equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)){ 
          boolean connected = intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false);
          if(!connected) {
               //Start service for disconnected state here
          }
      }

      else if(intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)){
          NetworkInfo netInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
          if( netInfo.isConnected() )
          {
              //Start service for connected state here.
          }   
      }
  }