Android 使用InCallService以静默方式拒绝呼叫

Android 使用InCallService以静默方式拒绝呼叫,android,Android,我正在尝试使用InCallService通过使我的应用程序成为默认拨号程序来拒绝来电。拒绝来电很好,但问题是如果手机处于振动模式,它会振动一点。我已经探索了这个类,但我找不到任何方法使振铃器静音。这是我的代码,我是如何实现InCallService服务的 你能告诉我怎样才能无声地拒绝电话吗 我建议您改变方法 步骤1:创建广播接收器 public class CallReceiver extends BroadcastReceiver { private Context context;

我正在尝试使用InCallService通过使我的应用程序成为默认拨号程序来拒绝来电。拒绝来电很好,但问题是如果手机处于振动模式,它会振动一点。我已经探索了这个类,但我找不到任何方法使振铃器静音。这是我的代码,我是如何实现InCallService服务的


你能告诉我怎样才能无声地拒绝电话吗

我建议您改变方法

步骤1:创建广播接收器

public class CallReceiver extends BroadcastReceiver {

    private Context context;

    @Override
    public void onReceive(Context context, Intent intent) {
        this.context = context;
        rejectCall();
    }

    public void rejectCall() {
        try {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                TelecomManager telecomManager = (TelecomManager) context.getSystemService(Context.TELECOM_SERVICE);
                if (telecomManager != null) {
                    telecomManager.endCall();
                }
            } else {
                rejectCallViaTelephonyManager();
            }
            Log.d(TAG, "call ended successfully.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void rejectCallViaTelephonyManager() {
        ITelephony telephonyService = getTelephonyService(context);
        if (telephonyService != null) {
            telephonyService.silenceRinger();
            telephonyService.endCall();
        }
    }

    private ITelephony getTelephonyService(Context context) {
        TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        try {
            Class c = Class.forName(tm.getClass().getName());
            Method m = c.getDeclaredMethod("getITelephony");
            m.setAccessible(true);
            return (ITelephony) m.invoke(tm);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}
步骤2:将此接收者添加到清单文件

<receiver
    android:name=".CallReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter android:priority="999">
        <action android:name="android.intent.action.PHONE_STATE" />
    </intent-filter>
</receiver>
步骤3:您还需要添加权限

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

如果要使应用程序成为默认拨号程序应用程序,请尝试实现API。该API将允许您在系统开始响铃之前拦截和阻止调用。

我们已经这样做了。它在andoid P上不起作用。其次,它也会稍微震动手机。它确实起作用,TelecomManager专门用于设备Build.VERSION.SDK\u INT>=Build.VERSION\u code.O。对于振动问题,您需要查看通知服务。
<uses-permission android:name="android.permission.READ_PHONE_STATE" />