Android通话处理:从Java端发送AT命令流程
需积分: 10 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拨打电话的基本处理流程,从用户界面到底层通信,涉及了多个组件和服务的交互。每个环节都确保了安全性和用户体验。
2011-11-13 上传
2021-09-30 上传
2021-10-01 上传
2021-10-18 上传
2013-05-27 上传
2022-09-24 上传
2022-09-14 上传
zfenghui
- 粉丝: 1
- 资源: 12
最新资源
- SSM Java项目:StudentInfo 数据管理与可视化分析
- pyedgar:Python库简化EDGAR数据交互与文档下载
- Node.js环境下wfdb文件解码与实时数据处理
- phpcms v2.2企业级网站管理系统发布
- 美团饿了么优惠券推广工具-uniapp源码
- 基于红外传感器的会议室实时占用率测量系统
- DenseNet-201预训练模型:图像分类的深度学习工具箱
- Java实现和弦移调工具:Transposer-java
- phpMyFAQ 2.5.1 Beta多国语言版:技术项目源码共享平台
- Python自动化源码实现便捷自动下单功能
- Android天气预报应用:查看多城市详细天气信息
- PHPTML类:简化HTML页面创建的PHP开源工具
- Biovec在蛋白质分析中的应用:预测、结构和可视化
- EfficientNet-b0深度学习工具箱模型在MATLAB中的应用
- 2024年河北省技能大赛数字化设计开发样题解析
- 笔记本USB加湿器:便携式设计解决方案