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);
}
)
static final String ALLOWED_EXTRA_CALL_ORIGIN ="com.android.contacts.activities.DialtactsActivity";
IncallScreen.java
电话挂断时 会交给onDisconnect()处理,会发送一个延时的消息DELAYED_CLEANUP_AFTER_DISCONNECT出来
int callEndedDisplayDelay =
受到延时消息后会调用delayedCleanupAfterDisco
case DELAYED_CLEANUP_AFTER_DISCONNECT:
delayedCleanupAfterDisco
final Intent intent = PhoneApp.createCallLogIntent();
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent);
这也就是为啥调用后跑到call log的原因,google本意是打完电话用户都期待去通话记录,可实际上很多程序不希望如此,
到了4.0以后这段代码被修正了
final Intent intent = mApp.createPhoneEndIntentUsin
而在com.android.phone.PhoneApp里
public Intent createPhoneEndIntentUsin
}
在4.0版本前 有需要可以通过监听通话结束状态,把目标Activity start起来.
这里inCallUiState.latestActiveCallOrigin是从call intent 的extra里读出的,(
在拨号界面有做这个处理 if
}
)
不过从 privatepublic static final String EXTRA_CALL_ORIGIN = "com.android.phone.CALL_ORIGIN";
看,目前是有意识禁止返回"com.android.contacts.activities.DialtactsActivity"之外的activity,也许将来可以放宽这个限制.
当然可以定制rom的话可以自定义放宽这个限制。