android.net.wifi.STATE_CHANGE:在Wifi断开连接时未触发

jld*_*ont 10 android wifi wifimanager

当Wifi连接重新启动时,仅具有带动作的广播意图NETWORK_STATE_CHANGED_ACTION(其常量值是 android.net.wifi.STATE_CHANGE)是正常的吗?即,当Wifi断开连接时,我没有得到这个意图.

更新:我最感兴趣的是> = 2.2 Froyo

rsp*_*lak 24

public static final String SUPPLICANT_CONNECTION_CHANGE_ACTION

自:API级别1

广播意图动作指示已建立与请求者的连接(并且现在可以执行Wi-Fi操作)或者与请求者的连接已丢失.一个额外提供连接状态作为布尔值,其中true表示CONNECTED.

也可以看看

EXTRA_SUPPLICANT_CONNECTED

常数值:"android.net.wifi.supplicant.CONNECTION_CHANGE"

在android的API中,它表示检查STATE_CHANGE以获取网络连接并不是一个好主意,而是应该使用SUPPLICANT_CONNECTION_CHANGE_ACTION.这将注意到wifi网络的建立,以及wifi网络的断开.我不知道这对你有帮助,但我确实希望如此.链接


M G*_*nja 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>
Run Code Online (Sandbox Code Playgroud)

并且你输入一个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.
          }   
      }
  }
Run Code Online (Sandbox Code Playgroud)

  • 我不知道,但SUPPLICANT_CONNECTION_CHANGE_ACTION对我不起作用.它永远不会被解雇.我不得不使用WifiManager.NETWORK_STATE_CHANGED_ACTION来做同样的事情.它就像一个魅力! (2认同)