【问题标题】:Get incoming call number programmatically on android 10在android 10上以编程方式获取来电号码
【发布时间】:2020-08-19 19:43:24
【问题描述】:

查看以前的solutions 解决这个问题现在是depreciated 从 api 29(Android 10) 开始。有没有人能够获得 api 29 的传入电话号码。显然现在要做到这一点,您需要使用 CallScreeningService

【问题讨论】:

    标签: java android


    【解决方案1】:

    是的,实现类并在清单下面添加必要的权限:

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

    onScreenCall(Call.Details details) 内,您可以拨打details.getHandle(),它会返回来电的电话号码。仅当号码与设备上现有的联系信息不匹配时才会调用。

    @Override
    public void onScreenCall(Call.Details details) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            if(details.getCallDirection() == Call.Details.DIRECTION_INCOMING) {
                CallResponse.Builder response = new CallResponse.Builder();
                response.setDisallowCall(false);
                response.setRejectCall(false);
                response.setSilenceCall(false);
                response.setSkipCallLog(false);
                response.setSkipNotification(false);
                details.getHandle(); //This is the calling number
                respondToCall(details, response.build());
    
            }
        }
    }
    

    【讨论】:

    • 这是否真的适用于所有呼叫,因为文档指出“此外,只有不在用户联系人中的呼叫才会通过筛选。” -> developer.android.com/reference/android/telecom/…
    • 正确,只有当来电号码不在设备联系人列表中时才会调用
    • 此实现将仅获取未知或未保存在您的联系人中的电话号码。尚未完全回答问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 2011-08-22
    • 2012-03-19
    • 2017-12-31
    • 2011-04-21
    相关资源
    最近更新 更多