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

标签 android

我正在为 Android api 29 创建一个调用拦截器。为了做到这一点,我有一个扩展 CallScreeningService 的类,如 here 所述。 .我的应用程序可以检测来电和去电,但我不知道如何从 Call 中提取电话号码。详细信息:

@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());
    }
}

日志输出“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

此外,这是我的 CallScreening 类的 list :

    <service android:name=".phoneHandlers.CallScreenService"
        android:permission="android.permission.BIND_SCREENING_SERVICE">
        <intent-filter>
            <action android:name="android.telecom.CallScreeningService"/>
        </intent-filter>
    </service>

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

最佳答案

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

所以在你的 onScreenCall 中:

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

关于android - 如何从 CallScreeningService 的 Call.Details 中提取电话号码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56813810/

相关文章:

android - 通过编码得到数据分区的大小

Android 抽屉导航 : How to update the counter value

android - 从 Android Studio 运行时出现 "This version of the application is not configured for billing"错误

Android Play 商店 - 从服务器检索信息时出错。远程过程调用 :S-2:AEC-2

java - 在 Android 应用程序的 Eclipse 中构建工作区遇到问题

javascript - 在移动端浏览 PWA

android - 从 Activity 类调用方法 (React Native Android)

android - Xamarin/Visual Studio Mac 空白表单项目错误

Android查询sqlite数据库

android - 下载源代码时显示旋转轮而不是图像