У меня была аналогичная потребность в моем проекте, и в итоге мне пришлось использовать оба.
Действие android.net.wifi.supplicant.CONNECTION_CHANGE отправляет широковещательную рассылку, когда сеть подключена, но обычно до того, как устройство получит IP-адрес, поэтому для этого мне понадобилось действие android.net.wifi.STATE_CHANGE.
Действие android.net.wifi.STATE_CHANGE получает широковещательную рассылку при отключении, только если устройство отключается от сети, но Wi-Fi все еще включен (например, когда точка доступа выходит за пределы диапазона).
Таким образом, вы должны указать оба действия для получателя в манифесте:
<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.
}
}
}
person
M Granja
schedule
04.05.2011
NETWORK_STATE_CHANGED_ACTION
для подключения к сети.WIFI_STATE_CHANGED_ACTION
для включения, отключения и т. д. — соответствует android.net.wifi.WIFI_STATE_CHANGED. Пожалуйста, удалите свой запутанный комментарий. На ОП - я думаю, что ответ M Granja правильный. - person Mr_and_Mrs_D   schedule 14.11.2013