Android - Correct way to detect disconnecting from a particular wifi ssid?

前端 未结 4 1981
梦毁少年i
梦毁少年i 2021-02-06 16:02

I\'ve seen a couple of BroadcastReciever examples to detect wifi disconnects but none of them seem to work correctly (triggering twice for each disconnect for example) and none

4条回答
  •  礼貌的吻别
    2021-02-06 16:54

    NETWORK_STATE_CHANGED_ACTION was the answer in the end. The device having the problem registering this event started working when another app (which would also be listening for similar events) was uninstalled! No idea how or why an app could block events registering with another app. The final solution ended up being;

        String action = intent.getAction();
    
        if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION))
        {
            WifiManager manager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
            NetworkInfo networkInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
            NetworkInfo.State state = networkInfo.getState();
    
            if(state == NetworkInfo.State.CONNECTED)
            {
                String connectingToSsid = manager.getConnectionInfo().getSSID().replace("\"", "");
                WifiStateHistory.recordConnectedSsid(connectingToSsid);
    //connected
            }
    
            if(state == NetworkInfo.State.DISCONNECTED)
            {
                if(manager.isWifiEnabled())
                {
                    String disconnectedFromSsid = WifiStateHistory.getLastConnectedSsid();
    //disconnected
                }
            }
        }
    

提交回复
热议问题