技术详情

下图展示了与拨号器交互的系统组件:

与拨号器交互的组件

图 1. 与拨号器交互的组件

  • 系统界面:降低导航 Facet 来托管“电话”按钮,这会注册 intent:#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;package=com.android.car.dialer;launchFlags=0x10000000;end intent。这会启动用户的主 Activity,即 TelecomActivity

  • 应用启动器:管理整个应用列表。拨号器使用 android.intent.category.LAUNCHER 声明 TelecomActivity。从启动器的应用列表中选择手机应用会显示 TelecomActivity。

  • 主屏幕微件:在 AOSP 参考中,没有主屏幕微件。OEM 可能需要考虑为拨号器添加一个主屏幕 widget,以显示当前已连接手机的状态(以及其他信息)。

  • 通知中心

    • 收到来电时,系统会显示浮动通知 (HUN)。当拨号器 InCallServiceImpl 收到来电时,拨号器会将 HUN 发布到通知中心,HUN 会显示来电详情(例如电话号码或联系信息)。拨号器还会显示两个操作按钮:“接听”和“挂断”。点按“接听”按钮即可接听来电,并且 InCallServiceImpl 会处理活跃通话以显示拨号器的通话界面并关闭 HUN。点击 HUN 时会显示全屏通话页面,其中包含“接听”和“挂断”按钮。

    • 如有未读的未接来电提醒,系统会显示通知。点击通知会显示“通话记录”页面,并将未接来电标记为已读。点按“回拨”按钮可拨打电话并显示拨号器的通话界面。

  • 助理:用户可以让智能助理拨打电话,它可以显示拨号器的通话界面。

  • Google 地图:从 Google 地图中致电商家时,系统会发送 DIAL intent 以及电话号码的额外信息,这会启动拨号键盘页面以供快速拨号。

  • CarInputService:监控方向盘上“通话”和“结束通话”实体按键。按键对应的操作如下:

    • 当没有来电时,按下方向盘上的“通话”按钮会发送 DIAL intent 并显示拨号器的拨号键盘页面。

    • 当有来电时,按下方向盘上的“通话”按钮会使 TelecomManager 接听来电。

    • 当有来电时,按下方向盘上的“结束通话”按钮会使 TelecomManager 挂断电话。

  • 蓝牙

    • PBAPClient。从手机下载联系人并将其写入联系人提供程序。对于连接的每部手机,系统会创建一个帐号,并以设备的蓝牙 MAC 地址作为帐号名称,以 com.android.bluetooth.pbapsinkpackages/apps/Bluetooth 中定义的 @string/pbap_account_type)作为帐号类型。写入联系人提供程序的联系人会使用帐号信息写入,并在手机断开连接时清除。PBAPClient 不与拨号器直接交互,而是将联系人写入联系人提供程序。拨号器从联系人提供程序读取联系人。

    • HfpClientConnectionService:通过 HFP 管理蓝牙通话,并向 Telecom 服务程序报告来电。

  • Telecom:Android Telecom 框架管理 Android 设备上的音频和视频通话。由于拨号器是默认手机应用,因此它实现了 InCallService API,而 InCallController 会绑定拨号器的 InCallService 实现来处理通话。如需了解详情,请参阅创建替代电话应用成为默认电话应用

  • 系统设置:拨号器会监控已连接 HFP 的设备列表,并会在没有手机通过蓝牙连接到拨号器时显示错误消息。在 AOSP 参考中,“连接到蓝牙”按钮会将用户链接到系统“蓝牙设置”页面,以配对新设备或连接到配对的设备。

  • 防止驾驶员分心的引擎:此 Android 系统服务根据汽车的行驶状态施加用户体验限制。拨号器必须执行所有防止驾驶员分心的用户体验限制。为此,拨号器必须监听 CarUXRestrictionManager 并实现所有政策。拨号器必须:

    • 连接到 Car 库并获取 CarUXRestrictionManager 实例。

    • 订阅 CarUxRestrictions 列表中的更新,并按照文档中的说明实现这些更新。

    • 以下这些方面对拨号器而言极为重要:

      • “设置”页面针对车辆进行了优化。用户在驾车时无法访问拨号器“设置”页面。从操作栏中点按“设置”菜单,系统会显示阻止屏幕,以防止用户在驾车时访问“设置”。如果“设置”页面已显示,则系统会弹出阻止屏幕以阻止用户互动。

      • 驾车时无法访问系统设置。在“错误”页面上,未连接任何蓝牙设备时,点按“连接到蓝牙”按钮会显示系统蓝牙设置页面。系统会全面执行此按钮的用户体验限制。 驾车时,点击此按钮会显示错误消息,以便告知用户先停车,然后再执行相应操作。

      • 用户在驾车时无法启动“添加常用联系人”流程。“添加常用联系人”按钮处于停用状态。

用户流

拨号器主页面

下面提供了拨号器的各个页面。

拨号器主页面

图 2.拨号器主页面

来电处理

来电处理流程如下所示:

来电处理

图 3.来电处理

通知

各个通知页面如下所示:

通知

图 4.通知

通话状态

通话页面流程如下所示:

通话页面

图 5.通话页面

搜索界面如下所示:

搜索

图 6.搜索

设置

“设置”选项如下所示:

设置

图 7.设置