3

我有一个 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
    }
}

这在我的手机上运行良好(galaxy nexus 运行 4.2),但我在其他一些手机(一个运行 2.3.6,另一个运行 4.0.4)上看到了问题,其中从意图检索到的 wifiInfo 对象始终为null.

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

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

4

1 回答 1

3

尝试使用

WifiInfo wifiInfo = wifiManager.getConnectionInfo();

代替

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

wifiManager使用以下方法获得的WifiManager实例在哪里:

WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
于 2013-05-28T13:21:10.900 回答