【问题标题】:Getting the caller ID in Android 9在 Android 9 中获取来电显示
【发布时间】:2019-01-31 06:06:05
【问题描述】:

我一直在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) 总是返回 null。在 android versions<=API 27 中一切正常

我还在清单文件中添加了READ_PHONE_STATEREAD_CALL_LOG 权限。

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

提前感谢您的帮助。

【问题讨论】:

  • 先生发布 logcat 错误
  • 您好,没有 logcat 错误。代码接缝正常执行,但 incNumber 变量始终包含 null。
  • 对我来说,它在 Android9 上始终为空。有人吗?
  • 你有什么解决办法吗?我在运行时请求了这两个权限。仍然 incomingNumber 为空。
  • @GreenROBO - 抱歉延迟回复 - 请参阅下面的答案(以及答案下方的 cmets...)。

标签: android broadcastreceiver android-9.0-pie caller-id


【解决方案1】:

我找到了问题的答案:

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

其次,如果上述两个权限都已授予,则onReceive 方法会被调用两次(!!)。第一次意图为“空”(EXTRA_INCOMING_NUMBER 为空)。第二次通常按应有的方式填充意图。这在TelephonyManager Documentation 中有记录。

【讨论】:

  • 应用程序关闭时您的广播接收器是否调用??我正面临这个问题。请张贴您的整个接收器。
  • 是的,接收者被调用。 android-developers.googleblog.com/2018/10/…
  • 对不起,上一条评论还没写完就发了。我想提请您注意新的 google 政策,该政策于 2019 年 1 月 9 日生效,该政策限制使用 READ_CALL_LOG 权限(请参阅上一条评论中的链接)。
  • 正如@haris 所写,自 2019 年 1 月 9 日起,如果您的应用程序不是默认拨号器应用程序,则不能要求 READ_CALL_LOG。在 api 28 及以上版本没有此权限的情况下如何获取来电显示?
  • 读取通话记录权限受谷歌开发者控制台限制。您不能请求此权限。您需要填写表格以访问权限,如果他们同意,则只有您可以使用此权限
【解决方案2】:

在清单中添加READ_CALL_LOG 权限如下:

<uses-permission android:name="android.permission.READ_CALL_LOG" />

然后

应用程序 -> 您的应用程序 -> 权限 -> 授予通话记录权限

在第二次拨打您的receiver 之后,您现在应该得到电话号码

【讨论】:

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