OutgoingCallBroadcaster启动InCallScreen流程

OutgoingCallBroadcaster与InCallScreen的电话拨打与接听流程解析
本文详细解析了OutgoingCallBroadcaster接收ACTION_CALL信息,对紧急电话和普通电话进行分析并过滤,以及InCallScreen作为打电话和接电话界面的启动流程。通过分析startSipCallOptionHandler方法、SipCallOptionHandler方法、CallController方法和PhoneApp方法的执行过程,展示了电话拨打和接听的完整流程。

OutgoingCallBroadcaster:接收ACTION_CALL的信息,别且对紧急电话和普通电话进行分析,启到一个过滤的作用;

InCallScreen:打电话和接电话的界面;

无论是普通电话还是紧急电话都会启动InCallScreen界面;

流程:

1、OutgoingCallBroadcaster.class

startSipCallOptionHandler(....){

..........

Intent selectPhoneIntent = new Intent(ACTION_SIP_SELECT_PHONE, uri);
selectPhoneIntent.setClass(context, SipCallOptionHandler.class);
selectPhoneIntent.putExtra(EXTRA_NEW_CALL_INTENT, newIntent);
selectPhoneIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

context.startActivity(selectPhoneIntent);  //启动了SipCallOptionHandler.class

}

2、SipCallOptionHandler.class

setResultAndFinish() {

........

PhoneApp.getInstance().callController.placeCall(mIntent);

.........

}

3、CallController.class

placeCall(Intent intent) {

........

mApp.displayCallScreen();  //mApp = PhoneApp app;

}

4、PhoneApp.class

displayCallScreen() {

.......

startActivity(createInCallIntent());

}

static Intent createInCallIntent() {
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
| Intent.FLAG_ACTIVITY_NO_USER_ACTION);
intent.setClassName("com.android.phone", getCallScreenClassName());
return intent;
}

static String getCallScreenClassName() {
return InCallScreen.class.getName();
}

转载于:https://www.cnblogs.com/kevin-wang/archive/2012/10/21/2733032.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值