android挂断电话 返回 通话记录

探讨了Android系统中通过Intent拨打电话后返回行为的变化,特别是在不同版本间的差异,以及如何通过特定Intent实现自定义返回。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

android通过intent呼叫号码一般都不返回intent发起者而是跑到通话记录里去,有些场合会带来麻烦,主要代码在
IncallScreen.java
电话挂断时 会交给onDisconnect()处理,会发送一个延时的消息DELAYED_CLEANUP_AFTER_DISCONNECT出来
int callEndedDisplayDelay =
                    (cause == Connection.DisconnectCause.LOCAL)
                    ? CALL_ENDED_SHORT_DELAY : CALL_ENDED_LONG_DELAY;
            mHandler.removeMessages(DELAYED_CLEANUP_AFTER_DISCONNECT);
            mHandler.sendEmptyMessageDelayed(DELAYED_CLEANUP_AFTER_DISCONNECT,
                                             callEndedDisplayDelay);
受到延时消息后会调用delayedCleanupAfterDisconnect();                    
case DELAYED_CLEANUP_AFTER_DISCONNECT:
    delayedCleanupAfterDisconnect();
    break;
    
delayedCleanupAfterDisconnect()里会去返回某个Activity()同时把自己放到stack的后面而不是destory()掉(onfinish()也被重写了去调用moveTaskToBack(true);而不是super.onfinish()),    
final Intent intent = PhoneApp.createCallLogIntent();
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent);
这也就是为啥调用后跑到call log的原因,google本意是打完电话用户都期待去通话记录,可实际上很多程序不希望如此,

到了4.0以后这段代码被修正了
final Intent intent = mApp.createPhoneEndIntentUsingCallOrigin();
而在com.android.phone.PhoneApp里
public Intent createPhoneEndIntentUsingCallOrigin() {
     if (TextUtils.equals(inCallUiState.latestActiveCallOrigin, ALLOWED_EXTRA_CALL_ORIGIN)) {
        final Intent intent = new Intent();
        intent.setClassName(DEFAULT_CALL_ORIGIN_PACKAGE, inCallUiState.latestActiveCallOrigin);
         return intent;
     } else {
        return PhoneApp.createCallLogIntent();
     }
}
在4.0版本前 有需要可以通过监听通话结束状态,把目标Activity start起来.
这里inCallUiState.latestActiveCallOrigin是从call intent 的extra里读出的,(
在拨号界面有做这个处理 if (getActivity() instanceof DialtactsActivity) 
    intent.putExtra(DialtactsActivity.EXTRA_CALL_ORIGIN,DialtactsActivity.CALL_ORIGIN_DIALTACTS); 
}

 public static final String EXTRA_CALL_ORIGIN "com.android.phone.CALL_ORIGIN";
不过从 private static final String ALLOWED_EXTRA_CALL_ORIGIN ="com.android.contacts.activities.DialtactsActivity";
看,目前是有意识禁止返回"com.android.contacts.activities.DialtactsActivity"之外的activity,也许将来可以放宽这个限制.
当然可以定制rom的话可以自定义放宽这个限制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值