2013-01-25 47 views
2

後直接。但是,當我爲800毫秒添加一個Thread.Sleep()時,它可以工作。在連接WiFi和WifiInfo對象實際獲取信息的事件中似乎有延遲。下面的代碼片段工作:WifiInfo SSID空當WIFI_STATE_ENABLED由我直接廣播接收器後WifiInfo的SSID值爲null收到WIFI_STATE_ENABLED收到

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?

+0

你的Manifest文件中的代碼? –

回答

2

WIFI_STATE_ENABLED是不是你想要捕捉到,如果你希望得到的SSID的動作。你可能更感興趣的是NETWORK_STATE_CHANGED

的WIFI_STATE_ENABLED當手機上的WiFi設備接通時 - 它不一定是在這一點上的任何地方連接。

編輯:正如在評論中指出的那樣,NETWORK_STATE_CHANGED也觸發許多其他事件。爲了嚴格監控與WiFi接入點的連接,SUPPLICANT_CONNECTION_CHANGE_ACTION是正確的收聽操作。

+0

這很有道理,但我無法讓該事件發揮作用。儘管SUPPLICANT_CONNECTION_CHANGE_ACTION似乎有效。 NETWORK_STATE_CHANGED基於其他時間的文檔觸發器,例如wifi和3G之間的切換髮生時。我對這些並不感興趣。 – Tjaart

+0

如果您將答案更改爲SUPPLICANT更改,我會接受它。 :) – Tjaart

1

我一直在使用SUPPLICANT_CONNECTION_CHANGE_ACTION爲應用我的工作,發現當WiFi被啓用,然後連接它的偉大工程。

問題是,當Wifi保持啓用狀態時,它在改變WiFi網絡時似乎不會觸發。似乎在這種情況下發生的唯一操作是NETWORK_STATE_CHANGED(3次,前兩個WifiInfo爲空)。

我只試過1個設備(銀河S3 4.1),所以我不知道如何廣泛,這是但似乎SUPPLICANT_CONNECTION_CHANGE_ACTION應該對這項工作。另一個需要注意的是,我在同一接入點(2.4和5.2)上的2個SSID之間切換,所以也許Android實際上並沒有將其視爲網絡變化。

編輯:帶觸摸板運行的CyanogenMod 10使用銀河S3作爲第二WiFi熱點試驗。當Wifi保持啓用狀態時,切換SSID(和接入點)時,SUPPLICANT_CONNECTION_CHANGE_ACTION不會觸發。該事件似乎只在連接因啓用Wifi而發生時纔會發生。這實際上看起來像一個錯誤 - 我有一箇舊的Android 2.2傳奇,所以我也會嘗試。不幸的是,這些都無法在虛擬設備上測試。