返回介绍

判斷與監測Docking狀態

发布于 2020-04-01 13:16:51 字数 2380 浏览 979 评论 0 收藏 0

編寫:kesenhoo - 原文:http://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html

Android設備可以放置在許多不同的底座中,包括車載底座,家庭底座還有數字信號底座以及模擬信號底座等。由於許多底座會向設備充電,因此底座狀態通常與充電狀態密切相關。

你的應用類型決定了底座類型會對更新頻率產生怎樣的影響。對於一個體育類應用,可以讓設備在筆記本底座狀態下增加更新的頻率,或者當設備在車載底座狀態下停止更新。相反的,如果你的後臺服務用來更新交通數據,你也可以選擇在車載底座模式下最大化更新的頻率。

底座狀態也是以Sticky Intent方式來廣播的,這樣可以通過查詢Intent裡面的數據來判斷目前設備是否放置在底座中,以及底座的類型。

判斷當前底座狀態

底座狀態的具體信息會以Extra數據的形式,包含在具有ACTION_DOCK_EVENT這一Action的某個Sticky廣播中 ,因此,你不需要為其註冊一個BroadcastReceiver。如下所示,僅需要將null作為參數傳遞給registerReceiver()方法就可以了:

IntentFilter ifilter = new IntentFilter(Intent.ACTION_DOCK_EVENT);
Intent dockStatus = context.registerReceiver(null, ifilter);

你可以從EXTRA_DOCK_STATE這一Extra數據中,提取出當前的底座狀態:

int dockState = battery.getIntExtra(EXTRA_DOCK_STATE, -1);
boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;

判斷當前底座類型

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

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

注意最後兩種底座類型僅在API Level 11及以後版本的Android系統中才被支持。如果你只在乎底座的類型而不管它是數字的還是模擬的,那麼可以僅監測三種類型:

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;

監測底座狀態或者類型的改變

當設備被放置在或者拔出底座時,系統會發出一個具有ACTION_DOCK_EVENT這一Action的廣播。為了監聽底座狀態的變化,我們只需要在應用的Manifest文件中註冊一個BroadcastReceiver,如下所示:

<action android:name="android.intent.action.ACTION_DOCK_EVENT"/>

之於該BroadcastReceiver的具體實現,可以參考前面提到的那些方法,以此來提取出當前的底座類型和狀態。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文