10

Wifi 接続が回復するときに、アクションNETWORK_STATE_CHANGED_ACTION(定数値は ) を 含むブロードキャスト インテントのみを持つのは正常ですか? android.net.wifi.STATE_CHANGEつまり、Wifi が切断されている場合、この意図は得られません。

更新:私は主に >= 2.2 Froyo に興味があります

4

2 に答える 2

24

public static final 文字列 SUPPLICANT_CONNECTION_CHANGE_ACTION

以来: API レベル 1

サプリカントへの接続が確立されたこと (および Wi-Fi 操作を実行できるようになったこと) またはサプリカントへの接続が失われたことを示すブロードキャスト インテント アクション。もう 1 つのエクストラは、接続状態をブール値として提供します。true は CONNECTED を意味します。

関連項目

EXTRA_SUPPLICANT_CONNECTED

定数値: 「android.net.wifi.supplicant.CONNECTION_CHANGE」

Android の API では、ネットワーク接続について STATE_CHANGE をチェックするのは得策ではなく、代わりに SUPPLICANT_CONNECTION_CHANGE_ACTION を使用する必要があると書かれています。これにより、wifi ネットワークへの確立と、wifi ネットワークの切断が通知されます。これがあなたの助けになるかどうかはわかりませんが、そう願っています。リンク

于 2011-03-21T23:44:46.383 に答える
21

私のプロジェクトでも同様のニーズがあり、最終的に両方を使用する必要がありました。

android.net.wifi.supplicant.CONNECTION_CHANGE アクションは、ネットワークが接続されたときにブロードキャストを送信しますが、通常はデバイスが IP アドレスを取得する前に送信されるため、そのために android.net.wifi.STATE_CHANGE アクションが必要でした。

android.net.wifi.STATE_CHANGE アクションは、デバイスがネットワークから切断されている場合にのみ、切断時にブロードキャストを受信しますが、wifi は引き続き有効になっています (たとえば、ホットスポットが範囲外になった場合)。

したがって、レシーバーの両方のアクションをマニフェストに入れる必要があります。

<receiver android:name="net.moronigranja.tproxy.WifiReceiver">
            <intent-filter>
                    <action android:name="android.net.wifi.STATE_CHANGE"/>
                    <action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE" />
            </intent-filter>
</receiver>

そして、どのアクションがインテントで呼び出されているかを確認するために if を入れます。私のコードの BroadcastReceiver の onReceive メソッドは次のとおりです。

public void onReceive(Context c, Intent intent) {
      if(intent.getAction().equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)){ 
          boolean connected = intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false);
          if(!connected) {
               //Start service for disconnected state here
          }
      }

      else if(intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)){
          NetworkInfo netInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
          if( netInfo.isConnected() )
          {
              //Start service for connected state here.
          }   
      }
  }
于 2011-05-04T18:30:50.120 に答える