安卓系统中的来电拦截

5

目前,Android系统是否支持电话拦截?是否可以在电话接通时获取电话号码?

2个回答

4

是的,你可以……扩展 BroadcastReceiver 并覆盖 onReceive 方法如下:

public class CallListener extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
            String phoneNumber = intent.getExtras().getString(Intent.EXTRA_PHONE_NUMBER);
            System.out.println(phoneNumber);

            if (phoneNumber != null&& CallService.phoneNumber.equals("ANY_NUMBER_YOU_WANNA_INTERCEPT_ON")) {

                //do what you want to do :)
            }
        }

    }

您需要在AndroidManifest.xml中添加以下内容来添加广播接收器:

<receiver android:name=".CallListener" android:permission="android.permission.PROCESS_OUTGOING_CALLS">
        <intent-filter>
            <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
        </intent-filter>
 </receiver>

1
您可以使用自定义广播接收器(broadcast receiver) PhoneStateListener一起使用,以获取onCallStateChanged(int state, String incomingNumber)
(在AndroidManifest中还需要<uses-permission android:name="android.permission.READ_PHONE_STATE" />。)

谢谢Ben Williams,我想在用户打电话时获取号码。通话的目标号码。 - shebelaw
我不确定您是否可以直接处理,但是如果您正在监听电话状态更改,则应该能够知道何时发出了通话并结束,然后立即使用 CallLog.CallsgetLastOutgoingCall 获得最后拨打的号码。 - Ben Williams
谢谢。我会去看一下。但是我真正想要的是在通话处于活动状态或者当点击通话按钮时获取号码。 - shebelaw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接