2015-12-02 75 views
3

檢測連接失敗的最佳方法是什麼?如何檢測在Android中無法連接wifi?

我知道我們應該使用NetworkInfo.getState()來獲取連接狀態, 並且我還使用BroadcastReceiver和NETWORK_STATE_CHANGED_ACTION來檢測連接狀態更改。

我認爲在這種情況下,在broadcastReceiver中檢測到DISCONNECTED狀態是不匹配的。

NetworkInfo.State.DISCONNECTED意味着只有「斷開」,並不意味着連接失敗。

回答

3

WifiManager.SUPPLICANT_STATE_CHANGED_ACTION註冊接收器收到通知時,連接失敗occur.it可能是由於用於連接到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 
       } 
       } 
     } 
    }; 
+0

比k你和我很抱歉遲到的回覆。 – user3752013

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