Android 判斷并監(jiān)測設(shè)備的底座狀態(tài)與類型

2018-08-02 18:26 更新

編寫: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è)備是否放置在底座中,以及底座的類型。

判斷當(dāng)前底座狀態(tài)

底座狀態(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;

判斷當(dāng)前底座類型

如果設(shè)備被放置在了底座中,那么它可以有下面四種底座類型:

  • Car
  • Desk
  • Low-End (Analog) Desk
  • High-End (Digital) Desk

注意最后兩種底座類型僅在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;

監(jiān)測底座狀態(tài)或者類型的改變

當(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)。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號