我应该如何准确配置广播接收器,以使我的应用响应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

10-08 15:35