
---【phone分析】
文章平均质量分 88
Achillisjack
这个作者很懒,什么都没留下…
展开
-
IncallUI分析
6,IncallUIIncallUI主要包括通话界面的显示和更新,通话信息的查询,以及简单的逻辑,例如,接听/挂断等等。首先,当有来电时,一般会显示来电界面(InCallActivity)或者通知界面(StatusBarNotifier)。StatusBarNotifier通知栏是利用NotificationManager来实现的,当然也会异步查询电话的相关信息并显示。Dialer原创 2018-01-01 17:32:15 · 6802 阅读 · 0 评论 -
通话记录保存
4.3 通话记录保存在通话到结束的整个过程中,为了保存通话信息,包括通话号码,通话时间等。在通话完全结束后,就会将这些信息插入到通话记录的数据库中。1,插入通话记录在前面通话状态更新一节中,Telecom进程的CallsManager的setCallState方法会调用监听器的onCallStateChanged方法,for (CallsManagerListener listen原创 2018-01-01 12:41:38 · 4180 阅读 · 0 评论 -
通话信息查询分析 --- 之三
1,buildEntry 方法分析ContactInfoCache的buildEntry方法调用流程图如下,buildEntry方法主要逻辑如下,1,首先构造ContactCacheEntry对象,然后调用populateCacheEntry方法利用CallerInfo对象为ContactCacheEntry赋值,final ContactCacheEntry cce原创 2018-01-01 12:41:14 · 1489 阅读 · 0 评论 -
通话信息查询分析 --- 之二
4.2.2 结果返回结果返回和查询过程刚好相反,是一个不断的回调过程,入口为CallerInfoAsyncQueryHandler的onQueryComplete方法,调用流程图如下,CallerInfoAsyncQueryHandler的onQueryComplete方法也会根据CookieWrapper对象的event不同情况分别处理,并且对最后的结果进行回调,1,如果原创 2018-01-01 12:40:52 · 408 阅读 · 0 评论 -
通话信息查询分析 --- 之一
4.2 通话信息查询通常情况下,如果是一个陌生号码,则会显示为该陌生号码。如果是已知联系人,则会显示该联系人的名称,当然,还会显示归属地等其他信息。如下图,无论来电,去电还是状态更新,最后都会调用InCallPresenter的onCallListChange方法,并且在onCallListChange方法中调用startOrFinishUi 方法显示界面之后,ne原创 2018-01-01 12:40:30 · 1553 阅读 · 0 评论 -
AsyncQueryHandler原理分析
4,通话信息查询除了通话流程和界面更新之外,还会做一下事情:1,在去电时,在数据库中查询号码的相关信息;2,在来电时,也会在数据库中查询号码的信息;3,通话完成之后,会将通话信息插入到数据库中保存起来。4.1,AsyncQueryHandler原理作用: 对DB数据库进行异步操作,加快其数据处理的速度. 例如几千联系人的数据读取,按正常的处理速度会非常的慢,使用Asyn原创 2018-01-01 12:39:57 · 319 阅读 · 0 评论 -
通话状态 --- notifyPreciseCallStateChanged
3.3 notifyPreciseCallStateChangednotifyPreciseCallStateChanged方法是这三个方法中最难分析的一个, GsmCallTracker的notifyPreciseCallStateChanged方法调用流程图如下,PhoneBase的notifyPreciseCallStateChangedP方法调用逻辑如下,1,利原创 2017-12-31 14:44:34 · 3129 阅读 · 0 评论 -
通话状态 --- updatePhoneState
3.2 updatePhoneState上面的状态更新完成之后,其他状态也会继续更新。GsmCallTracker的updatePhoneState方法调用流程图如下,GsmCallTracker的updatePhoneState方法逻辑如下,1,为前一个状态赋值,PhoneConstants.State oldState = mState;2,根据GsmCall对原创 2017-12-31 13:35:23 · 896 阅读 · 0 评论 -
通话状态 --- Call.State状态更新
3.1 Call.State状态更新调用流程图如下,GsmConnection的update方法逻辑如下,1,首先调用parentFromDCState方法对通话状态进行映射,获取GsmCall对象,newParent = parentFromDCState(dc.state);2,然后调用GsmCall的detach,update或者attach方法对通话状态进行原创 2017-12-31 13:28:07 · 2894 阅读 · 0 评论 -
通话状态 --- 转换和更新
2.3,通话状态的转换和更新GsmCallTracker的handleMessage方法中对EVENT_POLL_CALLS_RESULT消息处理如下,case EVENT_POLL_CALLS_RESULT: ar = (AsyncResult)msg.obj;//获取查询结果 if (msg == mLastRelevantPoll) { if (D原创 2017-12-31 13:16:40 · 1257 阅读 · 0 评论 -
通话记录分析
1,通话记录1.1 初始化在Dialer中,通话记录信息都是通过CallLogActivity 显示,实际上,真正完成的是CallLogFragment 。CallLogActivity的内部类ViewPagerAdapter的getItem方法如下,public Fragment getItem(int position) { switch (getRtlPositio原创 2017-09-13 18:55:20 · 2114 阅读 · 0 评论 -
挂断界面流程分析
3,挂断界面分析无论数本地主动挂断还是远程挂断,最后都会finish通话界面。在远程挂点电话流程分析已论述, CallsManager的setCallState方法会更新界面,在此就是finish通话界面。同样的,消息流也会从services telecom走到InCallUI。3.1 services telecomCallsManager的setCallState方原创 2017-08-16 22:06:23 · 1103 阅读 · 0 评论 -
来电界面以及响铃分析
2,来电界面以及响铃来电时,除了有来电界面,还有响铃。2.1 来电界面在前面已经论述过,也是调用InCallController的onCallAdded方法启动来电界面,大体流程和去电界面相同。不同的是CallList之后的onCallAdded方法,调用流程图如下,CallList之后的onCallAdded方法如下,public void onCallAdd原创 2017-08-16 22:00:12 · 2622 阅读 · 0 评论 -
去电界面启动分析---之二
1.3启动去电界面在InCallController的onCallAdded方法中有关去电界面的代码如下,inCallService.addCall(parcelableCall);通过binder跨进程调用Incall 的InCallService内部类InCallServiceBinder的addCall方法,public void addCall(ParcelableCall原创 2017-08-16 21:54:02 · 923 阅读 · 0 评论 -
去电界面启动分析---之一
1,去电界面启动分析在去电流程中论述过,会调用CallsManager的startOutgoingCall启动拨号界面,在该方法中会调用addCall方法,此时还处于services telecom进程中。addCall(call);addCall方法如下,for (CallsManagerListener listener : mListeners) { if (L原创 2017-08-16 21:36:03 · 980 阅读 · 0 评论 -
远程挂断电话流程分析
3,远程挂断电话流程分析3.1 services Telephony当远程挂断/拒接电话时,GsmCallTracker的handlePollCalls 方法有关代码如下,if (mDroppedDuringPoll.size() > 0) { mCi.getLastCallFailCause( obtainNoPollCompleteMessage(EVENT_G原创 2017-08-15 21:36:08 · 2202 阅读 · 0 评论 -
远程来电流程分析---之二
2.4 services TelephonyConnectionService的createConnection调用流程图如下,方法代码如下,1,首先根据电话的状态创建一个连接,Connection connection = isUnknown ? onCreateUnknownConnection(callManagerAccount, request): isInc原创 2017-08-14 21:50:59 · 814 阅读 · 0 评论 -
远程来电流程分析---之一
2,远程来电流程分析2.1 opt telephonyhandlePollCalls中有关notifyNewRingingConnection调用流程图如下,最后会调用GSMPhone的notifyNewRingingConnection方法,if (newRinging != null) { mPhone.notifyNewRingingConnection原创 2017-08-14 21:46:32 · 1026 阅读 · 0 评论 -
主动上报电话信息流程分析
1,主动上报电话信息流程分析和打电话,主动接听,挂断相对应的分别是远程来电,远程挂断电话等等,这时候消息的流程处理刚好相反。首先接收到消息的是Modem层,然后Medoem再上传给RIL层,RIL进程通过sokcet将消息发送给RILJ(framework层的RIL),进入RILJ的processUnsolicited方法.当有来电或者远程挂断时, RIL层发送的是RIL_UNSO原创 2017-08-13 20:22:38 · 1350 阅读 · 0 评论 -
挂断电话流程分析
4,挂断电话流程分析4.1 InCallUI点击通话界面的挂断按钮,就会调用CallCardFragment的如下代码,mFloatingActionButton.setOnClickListener(new View.OnClickListener() {@Override public void onClick(View v) { getPresenter()原创 2017-08-13 20:17:37 · 2629 阅读 · 0 评论 -
拒接电话流程分析
3,拒接电话流程分析当有来电时,在来电界面,一般向左滑动是拒接电话,向右滑动是接听电话.因此,拒接的流程和接听的流程几乎完全相同。3.1 InCallUI在InCallUI当中的流程图如下,AnswerFragment的onDecline方法如下,public void onDecline(Context context) { getPresenter()原创 2017-08-13 20:08:03 · 1828 阅读 · 0 评论 -
接听电话流程分析
2,接听电话流程分析2.1 InCallUI当有来电时,在来电界面,一般向左滑动是拒接电话,向右滑动是接听电话.在AnswerFragment.java中,接听电话会调用到onAnswer方法,调用流程图如下,onAnswer方法如下,public void onAnswer(int videoState, Context context) { Log.d(原创 2017-08-13 19:55:11 · 4953 阅读 · 0 评论 -
去电流程分析---之二
1.3 services TelephonyTelephony的AndroidManifest有关定义如下,package="com.android.phone"coreApp="true"android:sharedUserId="android.uid.phone"android:sharedUserLabel="@string/phoneAppLabel"Telephon原创 2017-08-13 19:44:50 · 721 阅读 · 0 评论 -
去电流程分析---之一
1,去电流程分析1.1 app dialer拨号盘界面有关拨号的部分由DialpadFragment.java实现,无论是单卡还是双卡,当点击拨号按键时,最后都会调用handleDialButtonPressed方法进行处理,调用流程图如下,在handleDialButtonPressed方法中,首先进行号码的有效性检查,然后调用DialerUtils的startAct原创 2017-08-13 19:38:28 · 1903 阅读 · 1 评论