我目前正在尝试在 Android 中做一个相对简单的任务。
我想检测无线网络何时完全连接。此时我不在乎是否有互联网连接,我只想知道我的设备被认为连接到网络的确切时刻。
我将尝试描述我做了什么,以及我失败的悲惨。
请记住,我在这里尝试过官方建议以及一些答案,但无济于事。
活动注册接收器:
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
registerReceiver(ReceiverClass,intentFilter);
在我的接收器中,我尝试了这个答案中的东西
NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
if(info != null) {
if(info.isConnected()) {
// Do your work
Log.d("tag", "connected");
}
}
但我的应用程序没有按预期工作。当我杀死 Wifi(从顶部滑动并关闭它)时,我收到了一个广播(显然),但是我的两个 If 都进入了低谷,我得到了这个记录!打开wifi后,我又得到了2个日志,表明一切都已连接。我已经尝试过这样的一两件事
WifiInfo wi = intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO);
if(wi != null) {
SupplicantState ss = wi.getSupplicantState();
Log.d("I am desperate", ss.equals(SupplicantState.COMPLETED));
}
}
但同样的事情也会发生。我得到了真实的3次。
我不是android专家,我相信我遗漏了一些非常明显的东西。对我有什么帮助吗?
更新
我更多地考虑这可能是Android系统中的一个问题。目前我停止尝试从 Intent 获取信息。
我曾尝试使用EXTRA_WIFI_STATE但命令:
Log.d("WifiState" getIntExtra(WifiManager.EXTRA_WIFI_STATE, -9000));
记录我收到的每个广播的默认值 (-9000)。
如果我尝试SUPPLICANT_CONNECTION_CHANGE_ACTION广播 - 那甚至永远不会被抓住。我在这里真的很困惑......