android.net.wifi.STATE_CHANGE
マニフェストのイベントにサブスクライブする BroadcastReceiver があります。
ブロードキャスト レシーバーで、接続しているネットワークの 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
}
}
null
これは私の電話 (4.2 を実行している galaxy nexus) では問題なく動作しますが、インテントから取得された wifiInfo オブジェクトが常に
これは、レシーバーが実行を続行できないことを意味するため、この事実をログに記録し、毎回終了します。
電話がネットワークに接続されていることを明示的に確認しているので、なぜこれが当てはまるのか、私はちょっと途方に暮れています。誰でも洞察を提供できますか?