![](/img/trans.png)
[英]Query ContentProvider on Emulator with Android 10 (API 29)
[英]CallScreeningService getExtras NULL on Android 10 API 29
我正在使用 Android 类 CallScreeningService onScreenCall(Call.Details calldetails) 来获取所有来电,一切正常! 从现在开始,我遇到了一个错误,即在 Android 10 设备上,函数 calldetails.getExras() 和 calldetails.getIntentExtras() 始终返回 NULL,而不是 Bundle,我可以在其中读取更多信息。 在 Android 9 及更早版本的设备上一切正常。
有人有类似的问题吗? 这是源代码和一些声明:
public class IncomingCallService 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.IncomingCallService"
android:permission="android.permission.BIND_SCREENING_SERVICE">
<intent-filter>
<action android:name="android.telecom.CallScreeningService"/>
</intent-filter>
</service>
根据 Android 文档:
注意:提供给呼叫筛选服务的 Call.Details 实例将仅设置以下属性。 其余的 Call.Details 属性将设置为其默认值或 null。
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 的预期行为。
在 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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.