我正在使用Android类CallScreeningService onScreenCall(Call.Details calldetails)来获取所有来电,并且一切正常!从现在开始我有一个错误,那就是在Android 10设备上,函数calldetails.getExras()和calldetails.getIntentExtras()始终返回NULL,而不是Bundle,在其中我可以阅读一些进一步的信息。在Android 9设备及更低版本上,一切正常。
有人有类似的问题吗?这是源代码和一些声明:
public class IncommingCallService extends CallScreeningService {
@Override
public void onScreenCall(Call.Details callDetails) {
if (callDetails.getExtras() != null) {
Log.d(LOG_TAG, "Everything works on Android 9 or older");
}else{
Log.d(LOG_TAG, "Its Null on Android 10!");
}
if (callDetails.getIntentExtras() != null) {
Log.d(LOG_TAG, "Everything works on Android 9 or older");
}else{
Log.d(LOG_TAG, "Its Null on Android 10!");
}
}
Manifest.xml:
<service android:name=".call_handler.IncommingCallService"
android:permission="android.permission.BIND_SCREENING_SERVICE">
<intent-filter>
<action android:name="android.telecom.CallScreeningService"/>
</intent-filter>
</service>
答案 0 :(得分:0)
根据Android文档:
注意:提供给呼叫筛选服务的Call.Details实例 将仅设置以下属性。其余的 Call.Details属性将设置为其默认值 或为空。
Call.Details#getCallDirection()
Call.Details#getConnectTimeMillis()
Call.Details#getCreationTimeMillis()
Call.Details#getHandle()
Call.Details#getHandlePresentation()
仅在以下位置拨打电话 Call.Details#getHandle()Uri#getScheme()是PhoneAccount#SCHEME_TEL 通过了电话筛选。此外,仅呼叫不在 用户的联系人已通过筛选。对于拨出电话,否 拨号后的数字被传递。
所以您看到的只是Android 10的预期行为。
答案 1 :(得分:0)
在 Android 29+ 上,您需要用户权限:
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);
}