如何在Android中使用CallScreeningService拒绝来电

问题描述

我正在尝试在我的android应用程序(targetSdkVersion 29)中添加CallScreeningService,而没有使我的应用程序成为调用者应用程序。我按照所有说明进行操作,但仍然无法正确执行操作或在其中丢失了某些内容。 这是我的代码

public class CallAppService extends CallScreeningService {
    @Override
    public void onScreenCall(Call.Details callDetails) {
        Log.e("CallBouncer","Call screening service triggered");
        respondToCall(callDetails,new CallScreeningService.CallResponse.Builder().setdisallowCall(true).setRejectCall(true).build());
    }
}

<service android:name="com.myapp.service.CallAppService" android:permission="android.permission.BIND_SCREENING_SERVICE">
            <intent-filter>
                <action android:name="android.telecom.CallScreeningService"/>
            </intent-filter>
        </service>

添加了以下权限:

 <uses-permission android:name="android.Manifest.permission.READ_CONTACTS"/>
    <uses-permission android:name="android.Manifest.permission.READ_PHONE_STATE"/>
    <uses-permission android:name="android.Manifest.permission.READ_CALL_LOG"/>
    <uses-permission android:name="android.Manifest.permission.PROCESS_OUTGOING_CALLS"/>
    <uses-permission android:name="android.Manifest.permission.ANSWER_PHONE_CALLS"/>

但是,当我拨打电话时,此服务仍未调用。有什么我想念的吗?我也看到了这个issue,但并没有想到为什么我们需要一个ServiceConnection,因为文档中没有提到它。

解决方法

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
        RoleManager roleManager = (RoleManager) getSystemService(ROLE_SERVICE);
        Intent intent = roleManager.createRequestRoleIntent(RoleManager.ROLE_CALL_SCREENING);
        startActivityForResult(intent,1);
    }

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...