我应该如何准确配置广播接收器,以使我的应用响应wifi可用性的变化。不过,当应用未运行时,我并不真正在乎如何应对。
我要在这里完成的是,随着应用程序的运行,我需要使本地数据库与服务器上的副本保持同步。如果出于任何原因我失去了连接,我需要知道何时重新尝试连接才有意义。
最佳答案
由于您不关心应用程序何时运行,因此我建议您在代码中注册接收者,而不是将其放入清单中...
IntentFilter filter = new IntentFilter( WifiManager.WIFI_STATE_CHANGED_ACTION );
context.registerReceiver( wifiStateRec, filter);
WifiManager wifim = (WifiManager) context.getSystemService( Context.WIFI_SERVICE );
state = wifim.getWifiState(); // get initial state
完成后,请调用unregisterReceiver()。
您的接收器可能如下所示:
protected BroadcastReceiver wifiStateRec = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
assertTrue( WifiManager.WIFI_STATE_CHANGED_ACTION.equalsIgnoreCase( intent.getAction() ) );
state = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,-1);
String msg;
switch(state) {
case WifiManager.WIFI_STATE_DISABLED:
msg = "it is disabled";
break;
case WifiManager.WIFI_STATE_ENABLED:
msg = "it is enabled";
break;
case WifiManager.WIFI_STATE_DISABLING:
msg = "it is switching off";
break;
case WifiManager.WIFI_STATE_ENABLING:
msg="wifi is getting enabled";
break;
default:
msg="not working properly";
break;
}
Log.i(CTAG, "Wifi state = " + msg );
}
};
此函数中的某些代码最初来自此question。