繁体   English   中英

对于 API > 29 和 API < 29 对于 Android 应用程序,我需要获取来电电话号码和该号码的通话记录的最低权限是多少?

[英]What are the minimum permissions I need to get incoming phone number and call history for that number for API > 29 and API < 29 for Android app?

我希望为我的 Android 应用程序访问以下功能:

  • DONE检测来电状态(通过EXTRA_STATE实现,更多信息见下文)
  • 获取来电号码(不知道API > 29如何,见下文)
  • 获取传入号码的历史记录(这是可选的,因为我的应用程序可以构建电话历史记录,因为我只需要在此阶段短期使用它,因此如果我无法轻松访问未接/已接听的通话记录,我可以在技术上在我的应用程序中构建它只有号码。

通过研究,我发现对于旧版本,我可以简单地使用

intent.getExtras().getString(TelephonyManager.EXTRA_INCOMING_NUMBER);

And I would get the number but it does not work for API > 29 (number comes out as null for API = 29 because it is deprecated in API level 29 .). 另外,我不确定仅获取该号码的历史记录的最简单方法是什么。

我可以使用inCallService并且 Google 建议创建默认电话应用程序,该应用程序可能是默认呼叫应用程序,并为我提供所有必需的权限。 但是,我的应用程序不需要所有这些权限,理想情况下它不应该是一个完整的呼叫应用程序,它只是一个可以在默认应用程序之上运行的功能,因此我正在寻找需要最少数量的替代方案谷歌实际上会授予我的权限。

我还向用户询问 PHONE_CALL_STATE 以便通过 EXTRA_STATE 获取 PHONE_STATE,它只允许我知道呼叫何时开始、结束、接听和错过。 但是我需要一个号码本身和一些未接/接听电话的历史记录以及不同的 API。

任何帮助将不胜感激。

根据文档,如果接收方应用程序具有READ_CALL_LOG (除了READ_PHONE_STATE权限),则提供EXTRA_INCOMING_NUMBER

添加 READ_CALL_LOG 后,您会注意到您的应用程序将开始接收该广播两次,一次是getString(EXTRA_INCOMING_NUMBER)返回 null,另一次是getString(EXTRA_INCOMING_NUMBER)包含实际数字。 请参阅此处的文档说明

笔记:

  • 不能保证 2 个广播的顺序,所以如果你得到 2 个广播,其中一个有EXTRA_INCOMING_NUMBER = null,你可以忽略那个。
  • EXTRA_INCOMING_NUMBER仅在来电时收到,无法获取拨出电话的号码
  • 在 API >= 29 上确实不推荐使用该额外功能,但这仅意味着您的targetSdk (在您的 gradle 文件中)应该小于 29 才能正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM