如何在android中检测无法连接wifi?

时间:2015-12-02 07:10:34

标签: android wifi

检测连接失败的最佳方法是什么?

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

我认为在这种情况下,在broadcastReceiver中检测DISCONNECTED状态是不匹配的。

NetworkInfo.State.DISCONNECTED表示仅“断开连接”,并不表示连接失败。

2 个答案:

答案 0 :(得分:4)

注册接收方WifiManager.SUPPLICANT_STATE_CHANGED_ACTION,以便在发生连接失败时收到通知。可能是因为提供无效凭据以连接到WiFi

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
                 }
                }
       }
    };

答案 1 :(得分: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 
  }   
};