本文基于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