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

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;