我正在使用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>
根据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的预期行为。