android.net.wifi.zmiana stanu: nie wyzwalana przy rozłączeniu Wifi

Czy normalne jest posiadanie intencji transmisji tylko z akcją NETWORK_STATE_CHANGED_ACTION (której stałą wartością jest android.net.wifi.STATE_CHANGE), gdy połączenie Wifi powraca? Nie rozumiem tego zamiaru, Gdy Wifi jest odłączone.

UPDATE: Jestem głównie zainteresowany > = 2.2 Froyo

Author: Mr_and_Mrs_D, 2011-03-20

2 answers

Public static final String SUPPLICANT_CONNECTION_CHANGE_ACTION

Od: API Level 1

Broadcast intent działanie wskazujące, że połączenie z suplikant został ustanowiony (a teraz Można wykonać Operacji Wi-Fi) lub połączenie z suplikant zaginął. Jeden extra podaje stan połączenia jako boolean, gdzie true oznacza połączony.

Zobacz Też

EXTRA_SUPPLICANT_CONNECTED

Stała wartość: "android.net. wifi.supplicant. CONNECTION_CHANGE"

W API Androida mówi, że nie jest dobrym pomysłem sprawdzanie STATE_CHANGE pod kątem łączności sieciowej i zamiast tego powinieneś użyć SUPPLICANT_CONNECTION_CHANGE_ACTION. oznacza to, że sieć Wi-Fi jest podłączona do sieci Wi-Fi, a sieć Wi-Fi jest podłączona do sieci Wi-Fi. Nie wiem, czy to ci pomoże, ale mam nadzieję. LINK

 24
Author: rsplak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-13 23:04:15

Miałem podobną potrzebę w moim projekcie i skończyło się na tym, że musiałem użyć obu.

Akcja android.net.wifi.supplicant.CONNECTION_CHANGE wysyła transmisję, gdy sieć jest podłączona, ale zazwyczaj zanim urządzenie ma adres IP, więc potrzebowałem do tego akcji android.net.wifi.STATE_CHANGE.

Akcja android. NET. wifi. STATE_CHANGE odbiera transmisję przy rozłączeniu tylko wtedy, gdy urządzenie jest odłączone od sieci ,ale wifi jest nadal włączone (gdy hotspot gaśnie z Zakres, na przykład)

Więc powinieneś umieścić obie akcje dla odbiornika w manifeście:

<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>

I ustawiasz if, aby sprawdzić, które działanie jest wywoływane w intencji. Oto metoda Onreceive BroadcastReceiver w moim kodzie:

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.
          }   
      }
  }
 21
Author: M Granja,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-15 16:30:35