为什么这个WifiInfo有时在android上为null?

时间:2013-04-29 18:39:20

标签: android wifi android-wifi

我有一个BroadcastReceiver订阅清单中的android.net.wifi.STATE_CHANGE个事件。

在我的广播接收器中,我想提取我所连接的网络的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
    }
}

这在我的手机上工作正常(运行4.2的galaxy nexus),但我在其他一些手机上看到了问题(一个运行2.3.6,另一个运行4.0.4),其中从意图中检索到的wifiInfo对象总是null

这意味着我的接收器无法继续执行,因此它会记录这一事实,然后每次都退出。

我有点不知道为什么会出现这种情况,因为我明确检查手机是否连接到网络。任何人都可以提供任何见解吗?

1 个答案:

答案 0 :(得分:3)

尝试使用

WifiInfo wifiInfo = wifiManager.getConnectionInfo();

而不是

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

其中wifiManager是使用以下方式获取的WifiManager个实例:

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