Android 设备可插接到不同种类的基座,其中包括车载基座、家用基座以及数字或模拟基座。基座状态通常与充电状态联系密切,因为许多基座都为插接的设备供电。
您的应用会影响手机在插接状态下的更新频率。当体育新闻应用插入桌面基座时,您可以提高该应用的更新频率,或者在设备插入车载基座的情况下完全停用更新。相反,如果您的后台服务正在更新路况信息,则您可以选择在已插接车载基座的情况下最大限度地提高更新频率。
插接状态也会以粘性 Intent
形式广播,以便您查询设备是否已插接以及已插接情况下的基座类型。
确定当前插接状态
插接状态详情以 extra 形式包含在 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
extra 中提取当前插接状态:
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;