【问题标题】:CallScreeningService getExtras NULL on Android 10 API 29Android 10 API 29 上的 CallScreeningService getExtras NULL
【发布时间】:2019-12-02 21:52:53
【问题描述】:

我正在使用 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 bundle phone-call android-10.0


【解决方案1】:

根据 Android 文档:

注意:提供给呼叫筛选服务的 Call.Details 实例 只会设置以下属性。其余的 Call.Details 属性将设置为其默认值 或 null。

Call.Details#getCallDirection()

Call.Details#getConnectTimeMillis()

Call.Details#getCreationTimeMillis()

Call.Details#getHandle()

Call.Details#getHandlePresentation()

只调用 where Call.Details#getHandle() Uri#getScheme() 是 PhoneAccount#SCHEME_TEL 是 通过电话筛选。此外,只有不在 用户的联系人通过筛选。对于拨出电话,无 拨号后的数字被传递。

所以您所看到的只是 Android 10 的预期行为。

【讨论】:

  • 嗨,好的,感谢您的研究和信息!干得好!
  • 在 Android 29+ 上您需要用户权限
  • 我如何在这里获得当前设备的电话号码,用于通话?我想确定使用的是哪个 SIM 卡插槽及其相关电话号码。
【解决方案2】:

在 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);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    相关资源
    最近更新 更多