确定和监控插接状态和基座类型

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;