[英]android.net.wifi.STATE_CHANGE not always triggered on wifi handoff
[英]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.