确定和监控设备底座状态和类型

Android 设备可以停靠在不同类型的底座中。这包括车载底座、家用底座以及数字或模拟底座。设备底座状态通常与充电状态密切相关,因为许多底座会为停靠的设备供电。

在设备底座状态下,您的应用会影响手机的更新速率。当体育新闻应用在桌面底座中时,您可以提高其更新频率;或者,如果设备停靠在车载底座中,则可以完全停用更新。反之,如果您的后台服务正在更新路况信息,您可以在设备停靠在车载底座中时最大化更新频率。

设备底座状态也作为粘性 Intent 进行广播,您可以通过它查询设备是否已停靠,以及如果已停靠,是哪种类型的底座。

确定当前设备底座状态

设备底座状态详细信息作为额外数据包含在 粘性广播ACTION_DOCK_EVENT 操作中。由于它是粘性的,您可以调用 registerReceiver(),并传入 null 作为广播接收器。以下代码段展示了如何完成此过程

Kotlin

val dockStatus: Intent? = IntentFilter(Intent.ACTION_DOCK_EVENT).let { ifilter ->
    context.registerReceiver(null, ifilter)
}

Java

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

您可以从 EXTRA_DOCK_STATE 额外数据中提取当前的设备底座状态

Kotlin

val dockState: Int = dockStatus?.getIntExtra(EXTRA_DOCK_STATE, -1) ?: -1
val isDocked: Boolean = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED

Java

int dockState -1;
if (dockStatus != null) {
  dockState = dockStatus.getIntExtra(EXTRA_DOCK_STATE, -1);
}
boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;

确定当前设备底座类型

如果设备已停靠,它可以停靠在以下四种不同类型的底座中的任何一种

  • 车载
  • 桌面
  • 低端(模拟)桌面
  • 高端(数字)桌面

后两种选项仅在 Android API 级别 11 中引入,因此,当您只对底座类型感兴趣而不是具体是数字或模拟底座时,最好检查所有三种桌面底座类型

Kotlin

val isCar: Boolean = dockState == EXTRA_DOCK_STATE_CAR
val isDesk: Boolean = dockState == EXTRA_DOCK_STATE_DESK
        || dockState == EXTRA_DOCK_STATE_LE_DESK
        || dockState == EXTRA_DOCK_STATE_HE_DESK

Java

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;