gpt4 book ai didi

android - 在 Android 9 中获取来电显示

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:39:54 26 4
gpt4 key购买 nike

我一直在 BroadcastReceiver 中使用以下代码要得到来电的来电显示:

@Override
public void onReceive(Context aContext, Intent aIntent) {
String action = aIntent.getAction();

if (action==null) return;
if (!action.equals("android.intent.action.PHONE_STATE")) return;

String curState = aIntent.getStringExtra(TelephonyManager.EXTRA_STATE);

if ((TelephonyManager.EXTRA_STATE_RINGING.equals(curState))
&&(TelephonyManager.EXTRA_STATE_IDLE.equals(oldState)))){
String incNumber = aIntent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);

// do something here
}
oldState=curState;
}

不幸的是,这已停止工作 Android 9.0 (API 28) .进一步来说, aIntent.getStringExtra(EXTRA_INCOMING_NUMBER)总是返回空值。在安卓中versions<=API 27一切正常

我还添加了 READ_PHONE_STATEREAD_CALL_LOG list 文件中的权限。

有什么想法吗?还有其他人遇到同样的问题吗?

在此先感谢您的帮助。

最佳答案

我找到了问题的答案:

首先,在 Android 9 中,您必须在运行时明确请求 READ_PHONE_STATEREAD_CALL_LOG 权限。在以前的 Android 版本中,您只需请求 READ_PHONE_STATE 权限。它们都必须在运行时被询问。

其次,如果以上两个权限都被赋予,onReceive 方法被调用两次 (!!)。第一次 Intent 是“空”(EXTRA_INCOMING_NUMBER 为空)。第二次通常按应有的方式填充 Intent 。这记录在 TelephonyManager Documentation 中.

关于android - 在 Android 9 中获取来电显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52009874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com