【发布时间】:2020-08-19 19:43:24
【问题描述】:
查看以前的solutions 解决这个问题现在是depreciated 从 api 29(Android 10) 开始。有没有人能够获得 api 29 的传入电话号码。显然现在要做到这一点,您需要使用 CallScreeningService
【问题讨论】:
查看以前的solutions 解决这个问题现在是depreciated 从 api 29(Android 10) 开始。有没有人能够获得 api 29 的传入电话号码。显然现在要做到这一点,您需要使用 CallScreeningService
【问题讨论】:
是的,实现类并在清单下面添加必要的权限:
<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());
}
}
}
【讨论】: