Android通话处理:从Java端发送AT命令流程

需积分: 10 2 下载量 147 浏览量 更新于2024-07-25 收藏 43KB DOCX 举报
"Android_通话处理流程" 在Android操作系统中,拨打电话的过程涉及到多个组件和步骤。以下是详细的Android通话处理流程: 1. 启动应用程序: - `contacts` 应用程序的 `AndroidManifest.xml` 文件中,`android:process="android.process.acore"` 指定了该应用在 `acore` 进程中运行。这意味着联系人相关的服务和活动会在这个进程中执行。 - `DialtactsActivity` 是用户界面的入口点,它的 `intent-filter` 中 `action` 设置为 `main` 和 `category` 为 `launcher`,使得这个Activity出现在主菜单上,并作为用户首次打开应用时看到的界面。 - `DialtactsActivity` 包含四个选项卡:`TwelveKeyDialer`,`RecentCallsListActivity`,以及两个 `activity-alias` 分别代表联系人和收藏,但实际上显示联系人列表和收藏的是 `ContactsListActivity`。 2. 拨号操作: - 当用户在 `TwelveKeyDialer` 中选择或输入电话号码后,点击拨打按钮,按钮的 `id` 为 `R.id.digits`,这将触发 `onClick` 方法。 - 在 `onClick` 方法中,调用 `placecall()` 函数。这里创建了一个新的 `Intent` 对象,使用 `ACTION_CALL_PRIVILEGED` 行动,这个字符串对应于 `android.intent.action.CALL_PRIVILEGED`。`Uri.fromParts("tel", number, null)` 用于构建一个指向电话号码的URI,`number` 是用户输入的电话号码。 - 接着,`Intent` 的 `setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)` 设置标记,表示这是一个新任务,`startActivity(intent)` 启动这个意图,开始拨打电话的操作。 3. 权限验证与呼叫处理: - `ACTION_CALL_PRIVILEGED` 的意图会被 `packages/phone` 目录下的 `AndroidManifest.xml` 中的 `PrivilegedOutgoingCallBroadcaster` 这个 `activity-alias` 捕获。`targetActivity` 为 `OutgoingCallBroadcaster`。 - 在 `OutgoingCallBroadcaster` 的 `onCreate()` 方法中,系统会进行权限检查和呼叫处理。如果拨号号码是紧急号码,系统会直接启动 `InCallScreen` Activity,展示通话屏幕。 4. 系统服务介入: - Android 系统的电话服务(如 PhoneService 或 Telecom)接收到这个意图后,会继续处理拨号请求,包括建立到电话硬件(RIL - Radio Interface Layer)的连接,发送AT命令来拨打电话。 - AT命令是控制调制解调器的标准命令,例如 `ATD<number>` 用于发起呼叫。 5. 通话建立: - RIL 接收到 `ATD<number>` 命令后,会通过无线网络接口发送该请求,进而建立与对方的通话连接。 6. 通话状态更新: - 在通话过程中,系统会不断更新状态,例如呼叫建立、通话中、挂断等,这些状态的变化会反馈到用户界面上,例如 `InCallScreen`。 7. 结束通话: - 用户可以通过界面上的挂断按钮结束通话,此时系统会发送相应的AT命令挂断连接,通话结束。 以上就是Android拨打电话的基本处理流程,从用户界面到底层通信,涉及了多个组件和服务的交互。每个环节都确保了安全性和用户体验。