簡體   English   中英

android.net.wifi.STATE_CHANGE:在Wifi斷開連接時未觸發

[英]android.net.wifi.STATE_CHANGE: not triggered on Wifi disconnect

當一個Wifi連接重新啟動時,只有一個帶有動作NETWORK_STATE_CHANGED_ACTION (其常量值是android.net.wifi.STATE_CHANGE )的廣播意圖是否正常? 即,當Wifi斷開連接時,我沒有得到這個意圖。

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

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網絡的斷開 我不知道這對你有幫助,但我確實希望如此。 鏈接

我在項目中有類似的需求,最終不得不同時使用它們。

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.
          }   
      }
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM