2
我在檢測wifi的改變時遇到了一些麻煩。我希望我的應用程序能夠監視無線網絡,並在無線網絡斷開時創建一個警告對話框。在啓動,恢復等時或b。任何時候連接丟失。 這裏是我的代碼(我與this.registerReceiver(wifiStatusReceiver,新的IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION))註冊它的onResume;而在註銷的onPause它):廣播接收機沒有檢測到wifi連接丟失
BroadcastReceiver wifiStatusReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
int extraWifiState = intent.getIntExtra(
WifiManager.EXTRA_WIFI_STATE,
WifiManager.WIFI_STATE_UNKNOWN);
final String action = intent.getAction();
DialogFragment dialog = (DialogFragment) fragmentManager
.findFragmentByTag(WifiAlertDialogFragment.DIALOG_WIFI);
if (action.equals(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION)) {
NetworkInfo info = (NetworkInfo) intent
.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
if (info.getState().equals(NetworkInfo.State.CONNECTED)) {
logger.d("wifi changed, is still connected");
if (dialog != null)
dialog.dismiss();
} else {
logger.d("connection lost");
if (dialog == null)
WifiAlertDialogFragment.wifiCheck(HomeActivity.this);
}
}
switch (extraWifiState) {
case WifiManager.WIFI_STATE_DISABLED:
WifiAlertDialogFragment.wifiCheck(HomeActivity.this);
break;
case WifiManager.WIFI_STATE_DISABLING:
Toast.makeText(HomeActivity.this, R.string.wifi_disabled,
Toast.LENGTH_SHORT).show();
WifiAlertDialogFragment.wifiCheck(HomeActivity.this);
break;
case WifiManager.WIFI_STATE_ENABLED:
if (dialog != null)
dialog.dismiss();
break;
case WifiManager.WIFI_STATE_ENABLING:
if (dialog != null)
dialog.dismiss();
Toast.makeText(HomeActivity.this, "Wifi Enabling",
Toast.LENGTH_LONG).show();
break;
case WifiManager.WIFI_STATE_UNKNOWN:
// no op
break;
}
}
};
更新:我已經發現了問題,所以我會回答這個自己。我正在使用SUPPLICANT_STATE_CHANGED_ACTION,因爲它正在檢查任何wifi狀態 - 斷開連接,禁用,連接,啓用等。另一個對於監視連接來說很沒用,因爲它只檢查用戶是否在設置中啓用了WiFi或不。 – msnorth