2013-04-29 37 views
1

我有一個BroadcastReceiver訂閱清單中的android.net.wifi.STATE_CHANGE事件。爲什麼這個WifiInfo有時在Android上無效?

在我的廣播接收器中,我想提取我連接的網絡的SSID,然後用它做一些事情。這裏是我的代碼:

清單:

<receiver android:name=".ConnectionReceiver"> 
    <intent-filter > 
     <action android:name="android.net.wifi.STATE_CHANGE" /> 
    </intent-filter> 
</receiver> 

在我的連接接收器類:

public void onReceive(Context context, Intent intent) { 
    NetworkInfo networkInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); 
    Log.d("WFC", "CONNECTIVITY CHANGE: " + intent.getAction() + " state: " + networkInfo.getState().toString()); 
    if (intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION) && networkInfo.getState() == NetworkInfo.State.CONNECTED) { 

      WifiInfo wifiInfo = intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO); 
      if (wifiInfo == null) { 
      Log.w("WFC", "wifi info is null"); 
      return; 
      } 

      String rawSSID = wifiInfo.getSSID(); 
      // do stuff here 
    } 
} 

這工作我的手機(Galaxy Nexus的運行4.2)的罰款,但我已經看到了問題在其他一些電話上(一個運行2.3.6,另一個運行4.0.4),其中從intent檢索的wifiInfo對象總是null

這意味着我的接收器無法繼續執行,因此它記錄下這個事實,然後每次都退出。

我有點不知所措,因爲我明確檢查手機連接到網絡。誰能提供任何見解?

+0

難道我的回答解決問題了嗎? – 2013-10-20 21:13:39

回答

2

使用try

WifiInfo wifiInfo = wifiManager.getConnectionInfo(); 

代替

WifiInfo wifiInfo = intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO); 

其中wifiManager使用獲得的WifiManager實例:

WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); 
+0

這在大多數情況下會產生'wifiInfo.getSSID()//#「<未知的ssid>」。 – Ich 2016-02-03 22:26:21