我有一个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
。
这意味着我的接收器无法继续执行,因此它会记录这一事实,然后每次都退出。
我有点不知道为什么会出现这种情况,因为我明确检查手机是否连接到网络。任何人都可以提供任何见解吗?
答案 0 :(得分:3)
尝试使用
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
而不是
WifiInfo wifiInfo = intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO);
其中wifiManager
是使用以下方式获取的WifiManager
个实例:
WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);