拨号流程分析(第三篇)

本文深入分析Android 8.0中InCallService服务的响应过程,包括OnBind、setInCallAdapter和addCall方法。InCallService在拨号流程中起到关键作用,通过异步处理调用来更新通话界面。详细探讨了Dialer应用如何与Telecom应用交互,以及Call对象的创建和转换过程。
摘要由CSDN通过智能技术生成

本文基于Android 8.0

InCallService服务的响应过程

lnCallServicelmpl类继承于lnCallService类,类代码文件在packages/apps/Dialer工程下,而lnCallService类对应的代码文件则在 framework 下,其服务接口的定义文件为: frameworks/base/telecomm/java/com/android/internal/telecom/llnCallService.aidl ,主要定义了addCall、setlnCallAdapter、updateCall 等接口方法。
InCallController在拨号流程中,首先绑定服务,接着调用服务的setlnCallAdaptr、addCall和onCallXXXChanged接口 。 llnCallService服务的响应逻辑是什么呢。接下来 ,我们分别分析IlnCallService的onBind 、setlnCallAdapter和addCall 服务接口 。

1. OnBind服务被绑定的响应方法

/packages/apps/Dialer/java/com/android/incallui/InCallServiceImpl.java

@Override
  public IBinder onBind(Intent intent) {
   
    ...
    InCallPresenter.getInstance().onServiceBind();// 设置服务绑定状态mServiceBound属性
    InCallPresenter.getInstance().maybeStartRevealAnimation(intent);// 开启Activity
    TelecomAdapter.getInstance().setInCallService(this);// 保存服务
    ...
    return super.onBind(intent);// 调用父类的onBind方法
  }

InCallService的OnBind方法:

public IBinder onBind(Intent intent) {
   
    return new InCallServiceBinder();
}

InCallServiceBinder实现了IInCallServicer.aidl的接口,这些接口通过发送Handler消息 , 将服务接收到的服务请求转化为异步 处理方式:

private final class InCallServiceBinder extends IInCallService.Stub {
   
     @Override
     public void setInCallAdapter(IInCallAdapter inCallAdapter) {
   
         mHandler.obtainMessage(MSG_SET_IN_CALL_ADAPTER, inCallAdapter).sendToTarget();
     }

     @Override
     public void addCall(ParcelableCall call) {
   
         mHandler.obtainMessage(MSG_ADD_CALL, call).sendToTarget();
     }

     @Override
     public void updateCall(ParcelableCall call
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值