原文参见此处
确定和监控基座对接状态和类型
Android 设备支持几种不同类型的基座。这些类型包括车载或家用基座以及数字和模拟基座。许多基座可用于为插入的设备充电,因此基座状态通常与充电状态紧密相关。
您可以根据手机的基座状态调整更新频率,具体取决于相关应用。如果设备插入的是桌面基座,您就可以提高体育中心类应用的更新频率;如果设备插入的是车载基座,您就可以完全停用此类更新。相反,如果设备插入的是车载基座且后台服务正在更新路况,您就可以最大程度地提高更新频率。
系统是以持续 Intent 的形式广播基座状态的,这样您就可以查询设备是否插入了基座,如果已插入,您还可以查询基座类型。
确定当前的基座状态
基座状态详情是以附加信息的形式包含在 ACTION_DOCK_EVENT 操作的持续广播中的。由于这属于持续广播,因此您无需注册 BroadcastReceiver。您可以将传入 null 的 registerReceiver() 作为广播接收器直接调用,具体如下一代码段所示。
IntentFilter ifilter = new IntentFilter(Intent.ACTION_DOCK_EVENT);Intent dockStatus = context.registerReceiver(null, ifilter);
您可以从 EXTRA_DOCK_STATE 附加信息中提取当前的基座对接状态:
int dockState = battery.getIntExtra(EXTRA_DOCK_STATE, -1);boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;
确定当前的基座类型
用户可以将设备插入以下四种类型的基座:
车载基座桌面基座低端(模拟)桌面基座高端(数字)桌面基座
注意:后两种类型仅适用于 API 级别为 11 及以上的 Android,因此如果您只关注基座类型,而不在意基座究竟是数字的还是模拟的,那么比较合适的做法就是查看全部三种类型:
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;
监控基座状态或类型的变化
无论设备是否插入了基座,系统都会广播 ACTION_DOCK_EVENT 操作。要监控设备基座状态的变化,您只需在应用清单中注册广播接收器即可,具体如以下代码段所示:
<action android:name="android.intent.action.ACTION_DOCK_EVENT"/>
您可以使用上一步骤中所述的技术在接收器实施过程中提取基座的类型和状态。