2013-03-29 24 views
1

我使用getSSID()獲取新網絡連接時的wifi網絡名稱。 但有時候我得到這個值爲空。這是我的代碼:Wifi getSSID()返回null

清單中的權限是正確的,因爲正如我所說的,它的大部分工作時間都是正確的。

我使用此過濾器的廣播接收器:

<action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE" /> 

在廣播我這樣做:

if("android.net.wifi.supplicant.CONNECTION_CHANGE".equals(intent.getAction())) 
{ boolean bConected = intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false); 
    if(bConnected == true) 
    { WifiManager wifi = (WifiManager) Contexto.getSystemService(Context.WIFI_SERVICE); 
     String MyName = wifi.getConnectionInfo().getSSID(); 
     Sometimes MyName is null here even if Wifi is connected correctly 
    } 
} 

任何想法?

回答

4

我定期使用類似的代碼,連接時我從未收到過null

這裏是我的代碼:

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
WifiInfo info = wifi.getConnectionInfo(); 
String myName = info.getSSID(); 

因此,我建議你應該等待400到1000毫秒或收據的CONNECTION_CHANGE廣播的請求的信息,之前經過這麼。


下面是一個例子,將實施延遲:

final Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
     WifiInfo info = wifi.getConnectionInfo(); 
     String myName = info.getSSID(); 
    } 
}, 1000); 
+0

我用這個,我工作得很好: String sWifiId = wifi.getConnectionInfo()。getSSID(); if(sWifiId == null) {for(int i = 1; i <= 10; i ++) {try {Thread.sleep(1000);} catch(InterruptedException e){}; sWifiId = wifi.getConnectionInfo()。getSSID();如果(sWifiId!= null) break; } } – Ton

2

Android開發者網站上說:

的SSID可以爲空,如果沒有當前連接的網絡。

您正在監聽CONNECTION_CHANGE事件,如果連接狀態從連接狀態變爲斷開狀態,該怎麼辦?

無線設備有時會與接入點斷開連接,並且它們會以靜默方式重新連接,而您甚至不會注意到它已斷開連接。

+0

Bu tit is connected。實際上,我在狀態欄中看到了無線網絡圖標。 – Ton

+0

我編輯了我的回覆。 –

+1

@Halim:我已經提出了你的回答,原因有兩個:a)這是一個好主意,或許該設備正在失去聯繫,然後迅速重新連接,並b)祝賀你的聲望超過1000! –

0

我發現了申請者子系統只與WPA安全機制有關的困難方式,並且實際上不是用於監視一般無線連接狀態的好選擇。文件中的措詞會讓你相信這是可能的,但是在嘗試使用請求者操作時遇到了很多麻煩,包括類似於所描述的問題。

SupplicantState枚舉documenation:

,將使用這些枚舉值,以指示當前 的wpa_supplicant狀態。這比大多數用戶對 感興趣的內容更細化。通常,最好使用NetworkInfo.State。

使用NETWORK_STATE_CHANGED_ACTION並查看NetworkInfo額外我能夠得到預期的,穩定的行爲。