1

新しい接続が確立されるとすぐに、getSSID() を使用して wifi ネットワークの名前を取得します。しかし、その値に対して null になることがあります。これは私のコードです:

私が言ったように、ほとんどの場合は機能するため、マニフェストのアクセス許可は正しいです。

ブロードキャスト レシーバーにこのフィルターを使用します。

<action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE" />

ブロードキャストで私はこれを行います:

if("android.net.wifi.supplicant.CONNECTION_CHANGE".equals(intent.getAction()))
{  boolean bConected = intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false);
   if(bConnected == true)
   {  WifiManager wifi = (WifiManager) Contexto.getSystemService(Context.WIFI_SERVICE);
      String MyName = wifi.getConnectionInfo().getSSID();
      Sometimes MyName is null here even if Wifi is connected correctly
   }
}

何か案は?

4

3 に答える 3

5

同様のコードを定期的に使用していますがnull、接続時に受信したことはありません。

これが私のコードです:

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifi.getConnectionInfo();
String myName = info.getSSID();

CONNECTION_CHANGEしたがって、情報を要求する前に、ブロードキャストを受信して​​から 400 ~ 1000 ミリ秒程度待つことをお勧めします。


遅延を実装する 1 つの例を次に示します。

final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        WifiInfo info = wifi.getConnectionInfo();
        String myName = info.getSSID();
    }
}, 1000);
于 2013-03-29T18:51:46.607 に答える
3

Android Developers Web サイトには、次のように記載されています。

ネットワークが現在接続されていない場合、SSID は null である可能性があります。

イベントをリッスンしていますCONNECTION_CHANGEが、接続の状態が connected から disconnected に変わったらどうしますか?

Wifi デバイスがアクセス ポイントから切断されることがありますが、切断されたことに気付かないうちに再接続が行われます。

于 2013-03-29T18:52:37.297 に答える
0

サプリカント サブシステムは WPA セキュリティ メカニズムにのみ関連し、一般的な Wi-Fi 接続状態を監視するために使用するのは適切ではないという難しい方法を見つけました。ドキュメントの言葉遣いから、それが可能であると思われるかもしれませんが、サプリカント アクションを使用しようとすると、あなたが説明したような問題を含め、多くの問題が発生しました。

SupplicantState列挙ドキュメントから:

これらの列挙値は、現在の wpa_supplicant の状態を示すために使用されます。これは、ほとんどのユーザーが関心を持つよりもきめ細かく設定されています。一般に、NetworkInfo.State を使用することをお勧めします。

NETWORK_STATE_CHANGED_ACTION を使用して NetworkInfo エクストラを調べたところ、予想どおりの安定した動作を得ることができました。

于 2016-03-29T16:32:31.033 に答える