技术细节

下图说明了与 Dialer 交互的系统组件:

与拨号器交互的组件

图 1.与 Dialer 交互的组件

  • 系统用户界面。较低的导航面以托管电话按钮,该按钮注册intent:#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;package=com.android.car.dialer;launchFlags=0x10000000;end意图。这将启动用户的主要活动TelecomActivity

  • 应用启动器。管理整个应用程序列表。 Dialer 使用android.intent.category.LAUNCHER声明 TelecomActivity。从启动器的应用程序列表中选择电话应用程序会显示 TelecomActivity。

  • 主页小部件。在 AOSP 参考中,没有 Home 小部件。 OEM 可能需要考虑为 Dialer 添加 Home 小部件,以显示当前连接电话的状态(以及其他信息)。

  • 通知中心

    • 来电显示抬头通知 (HUN)。当 Dialer InCallServiceImpl收到来电时,Dialer 会将 HUN 发布到通知中心,通知中心会显示呼叫详细信息,例如电话号码或联系信息。拨号器还显示了两个操作按钮,应答和拒绝。通过点击应答按钮,呼叫被应答, InCallServiceImpl处理活动呼叫以显示拨号器的呼叫 UI 并关闭 HUN。单击 HUN 会显示带有应答和拒绝按钮的全屏 InCall 页面。

    • 未读未接来电显示通知。单击通知会显示呼叫历史记录页面并将未接来电标记为已读。点击 Call Back 按钮可拨打电话并显示 Dialer 的 InCall 用户界面。

  • 助手。用户可以要求助手拨打可能会显示 Dialer InCall 用户界面的呼叫。

  • 谷歌地图。从 Google 地图呼叫商家会发送带有额外电话号码的 DIAL 意图,这些电话号码将启动 Dialpad 页面以进行快速拨号。

  • 汽车输入服务。监控方向盘上呼叫和结束呼叫按钮的物理键。按下:

    • 无来电时方向盘上的呼叫按钮发送 DIAL 意图并显示 Dialer 的 Dialpad 页面。

    • 有来电时方向盘上的呼叫按钮使 TelecomManager 接听电话。

    • 有来电时方向盘上的结束通话按钮,TelecomManager 结束通话。

  • 蓝牙

    • PBAP 客户端。从手机下载联系人并写入联系人提供程序。对于连接的每部手机,都会创建一个帐户,其中设备的蓝牙 MAC 地址作为帐户名称, com.android.bluetooth.pbapsink (在packages/apps/Bluetooth中定义的@string/pbap_account_type )作为帐户类型。写入联系人提供者的联系人与帐户信息一起写入,并在电话断开连接时被清除。 PBAPClient不直接与 Dialer 交互,而是将联系人写入 Contacts Provider。 Dialer 从 Contacts Provider 读取联系人。

    • HfpClientConnectionService通过 HFP 管理蓝牙呼叫并将呼叫报告给电信服务。

  • 电信。 Android Telecom 框架管理 Android 设备上的音频和视频通话。由于 Dialer 是默认的电话应用程序,它实现了InCallService API,并且InCallController将绑定 Dialer 的 InCallService 实现以处理呼叫。有关更多详细信息,请参阅创建替换手机应用成为默认手机应用

  • 系统设置。 Dialer 监控 HFP 连接的设备列表,并在没有电话通过蓝牙连接到 dialer 时显示错误消息。在 AOSP 参考中,连接到蓝牙按钮将用户链接到系统蓝牙设置页面以配对新设备或连接到配对设备。

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

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

    • 订阅CarUxRestrictions列表中的更新并按照文档实施它们。

    • 对拨号器特别重要的:

      • 设置页面针对车辆进行了优化。用户在驾驶时无法访问拨号器设置页面。通过点击操作栏中的“设置”菜单,会显示一个阻止屏幕,以防止用户在驾驶时访问“设置”。如果设置页面已经显示,则会弹出阻止屏幕以停止用户交互。

      • 驾驶时无法访问系统设置。在错误页面上,当没有连接蓝牙设备时,连接到蓝牙按钮会显示系统蓝牙设置页面。此按钮的 UXR 是完全受限的。驾驶时,单击此按钮会显示一条错误消息,通知用户先停车,然后再执行操作。

      • 用户在驾驶时无法启动添加到收藏的流程。添加收藏夹按钮被禁用。

用户流

拨号器主

下面提供了 Dialer 的不同页面。

主拨号器页面

图 2.主拨号器页面

呼叫处理

呼叫处理流程如下所示:

呼叫处理

图 3.呼叫处理

通知

不同的通知页面如下所示:

通知

图 4.通知

通话状态

InCall 页面流程如下所示:

呼叫页面

图 5. InCall 页面

搜索显示为:

搜索

图 6.搜索

设置

设置选项是:

设置

图 7.设置