android_通话处理流程
第一部分:从java端发送at命令的处理流程。 拨出电话流程: 1、contacts的androidmanifest.xml android:process="android.process.acore"说明此应用程序运行在acore进程中。 DialtactsActivity的intent-filter的action属性设置为main,catelog属性设置为launcher,所以此activity能出现 在主菜单中,并且是点击此应用程序的第一个界面。dialtactsactivity包含四个tab,分别由TwelveKeyDialer、 RecentCallsListActivity,两个activity-alias DialtactsContactsEntryActivity和DialtactsFavoritesEntryActivity分别 表示联系人和收藏tab,但是正真的联系人列表和收藏是由ContactsListActivity负责。 2、进入TwelveKeyDialer OnClick方法,按住的按钮id为: R.id.digits,执 placecall() 在Android系统中,通话处理流程是一项复杂而关键的任务,它涉及到多个组件的协作。以下是根据提供的标题、描述和部分内容解析的详细步骤: 1. **应用启动与界面展示**: - `contacts` 应用程序运行在 `android.process.acore` 进程中,这是为了分离核心服务和用户界面,提高系统性能。 - `DialtactsActivity` 是主界面,由于 `intent-filter` 的设置,它出现在主菜单中,并且是启动应用时看到的第一个界面。 - `DialtactsActivity` 包含四个选项卡,其中 `TwelveKeyDialer` 用于数字拨号,`RecentCallsListActivity` 显示最近通话记录。`DialtactsContactsEntryActivity` 和 `DialtactsFavoritesEntryActivity` 是快捷入口,但实际显示联系人和收藏列表的是 `ContactsListActivity`。 2. **拨号操作**: - 当用户在 `TwelveKeyDialer` 中按下数字键(按钮id为 `R.id.digits`)时,会触发 `onClick` 方法。 - 在该方法中,通过调用 `placecall()` 发起拨号请求。创建一个 `Intent` 对象,设置 `ACTION_CALL_PRIVILEGED`,表明这是一个具有特权的拨号请求,同时指定电话号码,并添加标志 `FLAG_ACTIVITY_NEW_TASK` 以确保在新的任务栈中启动活动。 3. **特权拨号广播**: - `ACTION_CALL_PRIVILEGED` 意味着只有具有相应权限的应用才能处理此意图。`PrivilegedOutgoingCallBroadcaster` 是一个 activity-alias,它的目标 activity 是 `OutgoingCallBroadcaster`。 - `OutgoingCallBroadcaster` 在接收到此意图后,会进行一系列检查。如果号码是紧急号码,会直接启动 `InCallScreen`。然后,它会创建一个新的广播意图 `ACTION_NEW_OUTGOING_CALL`,并附加电话号码等信息,最后发送这个有序广播。 4. **拨号广播接收器**: - `ACTION_NEW_OUTGOING_CALL` 意图由 `OutgoingCallReceiver` 来接收。这个广播接收器负责进一步处理拨号请求。 - 在 `OutgoingCallReceiver` 的 `onReceive()` 方法中,会创建一个新的 `Intent` 对象,将原始意图中的电话号码和其它信息传递给新的意图,并设定目标类为 `InCallScreen`,添加 `FLAG_ACTIVITY_NEW_TASK` 标志。 5. **拨号逻辑**: - `InCallScreen` 在接收到广播意图后,会进行拨号的内部逻辑处理。在 `onCreate()` 或 `onNewIntent()` 方法中,会调用 `internalResolveIntent()` 方法来处理拨号请求,并最终调用 `placeCall()` 完成拨号操作。 这个过程涉及到了Android的界面交互、Intent机制、广播接收器以及权限管理等多个核心概念。通过这些步骤,Android系统能够确保安全、有效地处理用户的拨号请求,并与电话服务进行通信。在实际开发中,理解这些流程对于优化通话体验或实现自定义拨号功能至关重要。