android挂断电话 返回 通话记录

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);
受到延时消息后会调用delayedCleanupAfterDisco nnect();                                  
case DELAYED_CLEANUP_AFTER_DISCONNECT:
       delayedCleanupAfterDisco nnect();
       break;
      
delayedCleanupAfterDisco nnect()里会去返回某个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.createPhoneEndIntentUsin gCallOrigin();
而在com.android.phone.PhoneApp里
public Intent createPhoneEndIntentUsin gCallOrigin() {
        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、付费专栏及课程。

余额充值