如何从 CallScreeningService 中的 Call.Details 中提取电话号码?

Jai*_*ium 5 android

我正在为 Android api 29 制作一个呼叫拦截器。为了做到这一点,我有一个扩展 CallScreeningService 的类,如解释here。我的应用程序可以检测来电和去电,但我不知道如何从 Call.Details 中提取电话号码:

@RequiresApi(api = Build.VERSION_CODES.N)
public class CallScreenService extends CallScreeningService {

    @RequiresApi(api = Build.VERSION_CODES.Q)
    @Override
    public void onScreenCall(Call.Details callDetails) {
        CallResponse.Builder response = new CallResponse.Builder();
        Log.i("CallScreeningService", callDetails.toString());
    }
}
Run Code Online (Sandbox Code Playgroud)

日志输出“tel:************”,我怀疑这意味着我没有足够的权限来读取电话号码。在 Main 我请求以下所有权限:

   android.Manifest.permission.READ_CONTACTS,
   android.Manifest.permission.READ_PHONE_STATE,
   android.Manifest.permission.READ_CALL_LOG,
   android.Manifest.permission.PROCESS_OUTGOING_CALLS,
   android.Manifest.permission.ANSWER_PHONE_CALLS,
   Manifest.permission.CALL_PHONE
Run Code Online (Sandbox Code Playgroud)

此外,这是我的 CallScreening 课程的清单:

    <service android:name=".phoneHandlers.CallScreenService"
        android:permission="android.permission.BIND_SCREENING_SERVICE">
        <intent-filter>
            <action android:name="android.telecom.CallScreeningService"/>
        </intent-filter>
    </service>
Run Code Online (Sandbox Code Playgroud)

如何在 Call.Details 中读取电话号码?

Ibr*_*Ali 5

要获取已连接到呼叫的当前电话号码,您需要使用Call.Details#getHandle()

所以在你的里面onScreenCall

@Override
public void onScreenCall(Call.Details callDetails) {
   Log.i("Phone number", callDetails.getHandle().toString());
}
Run Code Online (Sandbox Code Playgroud)