停止启动呼叫接收屏幕,并在Android中通过自己的活动响应

ki0zmccv  于 2023-02-06  发布在  Android
关注(0)|答案(1)|浏览(107)

我想停止启动呼叫接收屏幕(默认值,通常当呼叫来时),而不是启动我自己的活动来响应。

smtd7mpg

smtd7mpg1#

首先创建BroadcastReceiver的子类
public class CallReceiver extends BroadcastReceiver {
添加到manifest.xml文件中
<receiver android:name="com.myapp.calldropper.CallReceiver" > <intent-filter> <action android:name="android.intent.action.PHONE_STATE" /> </intent-filter> </receiver>
在onReceive中,根据默认值启动另一个活动屏幕

Intent callRejectIntent = new Intent(context, MainActivity.class);
callRejectIntent.putExtra("MOBILE_NUMBER", mobNum);
callRejectIntent.putExtra("REJECT_COUNT", rejectCount);
callRejectIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(callRejectIntent);

你的活动将启动默认的一个。2现在你可以响应来自你的活动的来电,你可以拒绝来电。
为此,创建一个名为com.android.internal.telephony的单独包,并在其中创建一个名为ITelephony.aidl的简单文本文件。此文件将包含

package com.android.internal.telephony;
import android.os.Bundle;
interface ITelephony {
    boolean endCall();
    void dial(String number);
    void answerRingingCall();
}

在onCreate中添加以下代码

TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
    try {
        // "cheat" with Java reflection to gain access to TelephonyManager's ITelephony getter
        Class<?> c = Class.forName(tm.getClass().getName());
        Method m = c.getDeclaredMethod("getITelephony");
        m.setAccessible(true);
        telephonyService = (ITelephony) m.invoke(tm);

    } catch (Exception e) {
        e.printStackTrace();
    }

现在你可以通过调用下面的函数来拒绝调用

private void ignoreCall() {
    try {
        // telephonyService.silenceRinger();
        telephonyService.endCall();
    } catch (RemoteException e) {
        e.printStackTrace();
    }
    moveTaskToBack(true);
    finish();
}

相关问题