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;