W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
編寫:kesenhoo - 原文:http://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html
Android設(shè)備可以放置在許多不同的底座中,包括車載底座,家庭底座還有數(shù)字信號底座以及模擬信號底座等。由于許多底座會向設(shè)備充電,因此底座狀態(tài)通常與充電狀態(tài)密切相關(guān)。
你的應(yīng)用類型決定了底座類型會對更新頻率產(chǎn)生怎樣的影響。對于一個體育類應(yīng)用,可以讓設(shè)備在筆記本底座狀態(tài)下增加更新的頻率,或者當(dāng)設(shè)備在車載底座狀態(tài)下停止更新。相反的,如果你的后臺服務(wù)用來更新交通數(shù)據(jù),你也可以選擇在車載底座模式下最大化更新的頻率。
底座狀態(tài)也是以Sticky Intent方式來廣播的,這樣可以通過查詢Intent里面的數(shù)據(jù)來判斷目前設(shè)備是否放置在底座中,以及底座的類型。
底座狀態(tài)的具體信息會以Extra數(shù)據(jù)的形式,包含在具有ACTION_DOCK_EVENT這一Action的某個Sticky廣播中 ,因此,你不需要為其注冊一個BroadcastReceiver。如下所示,僅需要將null
作為參數(shù)傳遞給registerReceiver()方法就可以了:
IntentFilter ifilter = new IntentFilter(Intent.ACTION_DOCK_EVENT);
Intent dockStatus = context.registerReceiver(null, ifilter);
你可以從EXTRA_DOCK_STATE
這一Extra數(shù)據(jù)中,提取出當(dāng)前的底座狀態(tài):
int dockState = battery.getIntExtra(EXTRA_DOCK_STATE, -1);
boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;
如果設(shè)備被放置在了底座中,那么它可以有下面四種底座類型:
注意最后兩種底座類型僅在API Level 11及以后版本的Android系統(tǒng)中才被支持。如果你只在乎底座的類型而不管它是數(shù)字的還是模擬的,那么可以僅監(jiān)測三種類型:
boolean isCar = dockState == EXTRA_DOCK_STATE_CAR;
boolean isDesk = dockState == EXTRA_DOCK_STATE_DESK ||
dockState == EXTRA_DOCK_STATE_LE_DESK ||
dockState == EXTRA_DOCK_STATE_HE_DESK;
當(dāng)設(shè)備被放置在或者拔出底座時,系統(tǒng)會發(fā)出一個具有ACTION_DOCK_EVENT這一Action的廣播。為了監(jiān)聽底座狀態(tài)的變化,我們只需要在應(yīng)用的Manifest文件中注冊一個BroadcastReceiver,如下所示:
<action android:name="android.intent.action.ACTION_DOCK_EVENT"/>
之于該BroadcastReceiver的具體實現(xiàn),可以參考前面提到的那些方法,以此來提取出當(dāng)前的底座類型和狀態(tài)。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: