3

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 オブジェクトが常に

これは、レシーバーが実行を続行できないことを意味するため、この事実をログに記録し、毎回終了します。

電話がネットワークに接続されていることを明示的に確認しているので、なぜこれが当てはまるのか、私はちょっと途方に暮れています。誰でも洞察を提供できますか?

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 に答える