这篇博客分析一下拦截拨号的原理及方法。
在介绍具体的方法前,先来看看原理。
以Android 7.0为例,在电话的拨号流程中,当代码运行到packages/services/telephony/src/com/android/phone/OutgoingCallBroadcaster.java中时,
将进行如下操作:
private void processIntent(Intent intent) {
...............
Intent broadcastIntent = new Intent(Intent.ACTION_NEW_OUTGOING_CALL);
if (number != null) {
broadcastIntent.putExtra(Intent.EXTRA_PHONE_NUMBER, number);
}
.................
// Need to raise foreground in-call UI as soon as possible while allowing 3rd party app
// to intercept the outgoing call.
// 短暂提升接收者的运行优先级
broadcastIntent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
.........