如何检测 android 中无法连接 wifi?
How do I detect fail to connect wifi in android?
检测连接失败的最佳方法是什么?
我知道我们应该使用 NetworkInfo.getState()
来获取连接状态,
我还使用带有 NETWORK_STATE_CHANGED_ACTION
的 BroadcastReceiver 来检测连接状态变化。
我认为在 broadcastReceiver 中检测 DISCONNECTED
状态在这种情况下不匹配。
NetworkInfo.State.DISCONNECTED
仅表示"disconnected",并不表示连接失败。
您可以使用这种方式来检测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
}
};
向 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
}
}
}
};
检测连接失败的最佳方法是什么?
我知道我们应该使用 NetworkInfo.getState()
来获取连接状态,
我还使用带有 NETWORK_STATE_CHANGED_ACTION
的 BroadcastReceiver 来检测连接状态变化。
我认为在 broadcastReceiver 中检测 DISCONNECTED
状态在这种情况下不匹配。
NetworkInfo.State.DISCONNECTED
仅表示"disconnected",并不表示连接失败。
您可以使用这种方式来检测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
}
};
向 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
}
}
}
};