当我的 BroadcastReceiver 直接接收到 WIFI_STATE_ENABLED 之后,WifiInfo 的 SSID 值为空。但是,当我添加 Thread.Sleep() 800 毫秒时,它会起作用。连接 wifi 和 WifiInfo 对象实际获取信息的事件似乎存在延迟。下面的代码片段有效:
else if (intent.getAction().equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {
int extraWifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN);
switch (extraWifiState) {
case WifiManager.WIFI_STATE_ENABLED:
// The SSID is null just after connection is established. This
// event seems over eager.
try {
Thread.sleep(800, 0);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (!wifiFunctions.connectedToGConnectHotspot()) {
removeConnectedNotification();
} else {
settings.setLastNotificationTime(System.currentTimeMillis());
notifyUserOfAvailableHotspot(true);
return;
}
break;
这行得通,但它非常狡猾。如果在某些设备上需要更长的时间怎么办?是否有另一种方法来获取连接的 SSID。我查看了 EXTRA_NETWORK_INFO,但它从 API 级别 14 开始已被弃用,而且似乎也不包含 SSID。是否有另一种方法可以在不引入人工等待的情况下获取 SSID?