直後にWIFI_STATE_ENABLEDがBroadcastReceiverによって受信されると、WifiInfoのSSID値はnullになります。ただし、Thread.Sleep()を800ミリ秒追加すると機能します。Wi-Fiと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を取得する別の方法はありますか?