`
- 浏览:
206004 次
- 性别:
- 来自:
上海
-
前提:系统为android4.0
当android系统接到一个来电的时候,会从framework启动InCallScreen界面,然后当然是停留在这个界面等待响应了。
这里有一个InCallTouchUi类,来响应了你的操作。有拒接,接听和通过sms响应。
来电后,从
InCallScreen的updateIncomingCallWidgetHint()调用
mCallCard.setIncomingCallWidgetHint(hintTextResId, hintColorResId);
mCallCard.updateState(mCM);这两个方法,前面一个是用来显示当前电话状态的文本,后面一个用来更新状态。这个时候的状态为Phone.State.RINGING,
继续调用CallCard中的updateRingingCall(cm);然后调用 displayMainCallStatus(cm, ringingCall);
displayOnHoldCallStatus(cm, null);
--->mPrimaryCallInfo.setVisibility(View.VISIBLE);---> updateCallStateWidgets(call);----updateDisplayForPerson()---->updatePhotoForCallState(),这个主叫号码的显示就完成了,
---------------------------分割线-------------------------------
然后displayOnHoldCallStatus(cm, null);用来显示被保持的电话的界面。
当你接听电话的时候,会有一个回调函数onTrigger()函数响应,此时里面的whichHandle参数为ANSWER_CALL_ID,到达onTrigger()函数之后,首先调用 hideIncomingCallWidget();来把这个界面隐藏掉。然后调用mInCallScreen.handleOnscreenButtonClick(R.id.incomingCallAnswer);来响应接听按钮。
接下来到达InCallScreen的handleOnscreenButtonClick方法,进入internalAnswerCall();然后进行网络的判断,我这个是到达PhoneUtils.answerCall(ringing)这个ringing对象如下
Call ringing = mCM.getFirstActiveRingingCall();
-----------------------分割线--------------------------------------------
最终到达InCallScreen的updateScreen()---> updateInCallTouchUi();这个用来更新下面的静音,拨号盘之类的按钮,接下来是mCallCard.updateState(mCM);
----> updateDialpadVisibility();
-----> updateProviderOverlay();
------> updateProgressIndication();
这几个方法的调用。
进入updateInCallTouchUi()后,就调用mInCallTouchUi.updateState(mCM);进入InCallTouchUi的updateState方法中。然后是调用InCallTouchUi中的updateInCallControls(cm);方法,用来显示通话状态时的ui界面。(InCallTouchUi类对应的layout是incall_touch_ui.xml),
对于R.id.holdButton和R.id.swapButton的点击处理,是在mInCallScreen.handleOnscreenButtonClick(id);中,
而对于CallCard对应的layout是call_card.xml
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
本文将深入探讨"InCallScreen.rar_phone"所涉及的关键知识点,包括用户界面设计、通话功能实现、以及可能关联的编程语言和技术。 首先,我们来关注“电话应用”的“通话”屏幕设计。这个界面是用户进行通话操作的...
2. outgoingCallReceiver收到Intent消息后,调用onReceiver() -> doReceiver(),这将启动InCallScreen界面。 3. InCallScreen类根据用户是否首次进入,调用onCreate()或onNewIntent()。这两个函数都会调用...
如果是,`callNow`变量被设为true,启动`InCallScreen`并发送广播。若非紧急号码,则发送广播`Intent.ACTION_NEW_OUTGOING_CALL`。 2. **OutgoingCallReceiver.java** `OutgoingCallReceiver`是一个内部类,用于...
总结起来,Android拨打电话的流程涉及到多个组件协同工作,从用户点击拨号按钮开始,经过广播机制,到通话界面的初始化和通话状态的监控,整个过程体现了Android系统的模块化和事件驱动特性。同时,这个过程也涉及到...
在首次启动时,`InCallScreen`会执行`onCreate()`方法初始化界面,但在后续来电时,将从`onNewIntent()`方法开始执行,以快速响应新的来电事件。 #### OutgoingCallBroadcaster——拨打电话的广播器 当用户发起...
- outgoingCallReceiver 接收到 ACTION_NEW_OUTGOING_CALL 消息后,启动 InCallScreen 界面。 - InCallScreen 的 onCreate() 或 onNewIntent() 被调用,然后调用 IntentResolveIntent() 和 placeCall() 函数。 - ...
从RIL.java的查询机制开始,到GsmCallTracker的响应,再到CallManager的来电处理,最后通过CallNotifier和InCallScreen将来电信息显示给用户,这一流程确保了电话接听的顺利进行。而这一流程的实现细节在不同的硬件...
首先,让我们从拨打电话的流程开始: 1. **DialtactsActivity** 是Android联系人应用的主要入口点,它在`AndroidManifest.xml`中声明`android:process="android.process.acore"`,表明它运行在acore进程中。...
- **启动模式**:Phone应用中的IncallScreen通常以singleInstance模式启动,以保证通话界面的唯一性和优先级。 - **界面更新**:在通话结束后,首先通过onPhoneStateChanged消息更新界面,但如果应用不在前台(如...
如果号码是紧急号码,会直接启动 `InCallScreen`。然后,它会创建一个新的广播意图 `ACTION_NEW_OUTGOING_CALL`,并附加电话号码等信息,最后发送这个有序广播。 4. **拨号广播接收器**: - `ACTION_NEW_OUTGOING_...
4. **启动InCallScreen Activity**:若确认为紧急呼叫,则会通过设置`Intent`类名为`InCallScreen.class`来直接启动接听屏幕(InCallScreen)。同时,通过广播`ACTION_NEW_OUTGOING_CALL`向系统报告新的外拨电话。 5....
启动方式:singleInstance 处理通话事件的非界面处理之 CallNotifier,这类事件主要有发送通知、声音处理等非界面处理。通知由调用工具类 NotificationMgr 来完成。关于声音处理,如来电响铃,在来电期间,是 ...
在通话开始或结束时,InCallMenu类会根据需求动态地显示或隐藏菜单。这通常涉及到对视图层级的管理,通过调用View的show()和hide()方法来控制菜单的可见性。 3. **菜单项的事件处理** 当用户选择菜单项时,...
- 如果识别到的是紧急呼叫,则立即启动`InCallScreen`Activity。 - 提取拨号Intent中的电话号码等信息,并构建一个新的Intent用于广播。 - 使用`sendOrderedBroadcast()`发送有序广播。 4. **...
该架构方案涉及到多个模块的设计和整合,包括 PhoneApp、InCallScreen、CallCard、InCallMenu、DTMFTwelveKeyDialer 和 CallNotifier 等。 1. 引言 Phone 手机模块实现架构方案分析的目的是为了设计一个可靠、...
总的来说,Android中打电话的数据流程从用户按下拨号键开始,经过TwelveKeyDialer启动ACTION_CALL_PRIVILEGED的组件,接着在OutgoingCallBroadcast中根据号码类型转换ACTION,然后由InCallScreen负责展示通话界面并...
5. **最终拨打**:`InCallScreen`组件接收到请求后,正式开始拨号过程,连接至对方号码,至此,整个拨打电话流程完成。 通过上述详尽解析,我们可以看到,Android通话处理流程涵盖了从用户界面操作到系统底层通讯...
2. **接收处理**:`outgoingCallReceiver`接收到该Intent消息后,会调用`onReceive()`方法,进一步调用`doReceiver()`方法,启动`InCallScreen`界面。 3. **界面启动**:进入`InCallScreen`后,根据不同的情况调用...
这个Intent随后被系统的BroadcastReceiver(如PrivilegedOutgoingCallBroadcaster)捕获,然后转发到适当的Activity(如InCallScreen)并启动调用流程。 2. **Unsolicited消息的处理**: Unsolicited消息是指Modem...