如何在安卓设备上检测WiFi连接失败?

4

如何最好地检测连接失败?

我知道我们应该使用NetworkInfo.getState()来获取连接状态,同时我还使用带有NETWORK_STATE_CHANGED_ACTION的BroadcastReceiver来检测连接状态的变化。

我认为在广播接收器中检测DISCONNECTED状态在这种情况下不匹配。

NetworkInfo.State.DISCONNECTED仅意味着“已断开连接”,并不意味着连接失败。

2个回答

7

使用WifiManager.SUPPLICANT_STATE_CHANGED_ACTION注册接收器,以便在连接失败时得到通知。这可能是由于提供了无效的凭据来连接Wi-Fi。

private void registerReceiver() {
        IntentFilter filter = new IntentFilter();
        filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
        filter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
        registerReceiver(mReceiver, filter);
    }

还有您的下面接收者

 private BroadcastReceiver mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
        NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
            if (info != null) {
                if (info.isConnected()) {
                    //connected
                    WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
                    WifiInfo wifiInfo = wifiManager.getConnectionInfo();
                    String ssid = wifiInfo.getSSID();
                }
            }  else {
                if (intent.getAction().equals(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION)) {
                    if (intent.hasExtra(WifiManager.EXTRA_SUPPLICANT_ERROR)) {
                      //failed to connect
                }
            }
        }
    };

谢谢您,很抱歉回复晚了。 - user3752013
'EXTRA_SUPPLICANT_ERROR' 已于 API 28(Android 9.0 Pie)被弃用。WifiManager.ERROR_AUTHENTICATING 同样也是如此。现在我们应该使用什么,有什么替代品呢?有任何想法吗?我尝试了使用 WifiManager.NETWORK_STATE_CHANGED_ACTION,但没有成功。 - Jonas S.

0
你可以使用这种方式来检测WiFi是否已连接。
public class WifiReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {     
    ConnectivityManager conMan = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo netInfo = conMan.getActiveNetworkInfo();

    if (netInfo != null && netInfo.getType() == ConnectivityManager.TYPE_WIFI) 
        // Connection Successful 
    else
        // Connection  Failed 
  }   
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接