“电话”应用程序如何显示通讯录中未包含的联系人信息?

and*_*per 6 android android-dialer caller-id

背景

在Google 的“ 电话 ”应用中,有一个“来电显示和垃圾邮件”选项:

在此处输入图片说明

因此,如果您收到了不在通讯录上的某个人或某个组织的呼叫,但以某种方式被识别,则将为其命名,例如(称为“ + 972-035283487”):

在此处输入图片说明

自从Android的M(6.0 - API 23),应用程序可以替换默认的手机应用程序,然后还提供了替代的UI,当你呼叫某人或接到一个电话,通过扩展InCallService类,证明这里是基于

问题

我想尝试显示与“电话”应用程序上相同的信息,这意味着该人员/公司的名称(以防万一它可以识别出该名称)(并且不在通讯录上)。

我尝试过的

我试图分析通过拨号器的API获得的各种信息,但失败了:

  1. android.telecom.Call类的各个字段和功能

  2. getDetails Call类的里面,所以我就先里面有什么在那里,也有statusHints和“ 标签 ”内“ statusHints ”。这些都没有任何信息(返回null)。我尝试查看“ statusHints”的原因是因为这就是我在docs上看到的内容:

包含在通话界面中显示的状态标签和图标。

  1. 在“电话”应用程序上,按“了解更多信息”会转到一个网站(此处),该网站充满了我认为可能是数据来源的链接,但我认为应用程序本身并未使用此链接。相反,我认为它使用了Google的某种东西。

问题

  1. 是否可以获取此CallerId信息?如果是这样,怎么办?

  2. 电话应用程序如何做到这一点?它应该是开源的,所以必须有一些东西可以提供此信息,对吗?克隆它会以某种方式获得此信息吗?也许Google拥有自己的CallerID服务?

  3. 什么是“ callDetails”和“ statusHints”?他们提供什么?

Ahm*_*azy 3

我相信 Android 的本机手机应用程序正在使用 Google 的地点搜索 API。因为您可以通过电话号码轻松搜索某个地点,并获取地点详细信息,例如名称、地点 ID、格式化地址以及您可以在文档中找到的许多其他字段

\n\n

请求网址:\n https://maps.googleapis.com/maps/api/place/findplacefromtext/json

\n\n

请求方式:GET

\n\n

请求查询参数

\n\n
\n
    \n
  • key:您的应用程序的 API 密钥。
  • \n
  • input:指定要搜索的位置的文本输入(例如姓名或电话号码)。
  • \n
  • inputtype:输入的类型。这可以是textquery 或phonenumber之一。电话号码必须采用国际格式(以加号 (“+”) 为前缀,后跟国家/地区代码,然后是电话号码本身)。
  • \n
\n
\n\n

请求示例:\n https://maps.googleapis.com/maps/api/place/findplacefromtext/json?input=%2B972035283487&inputtype=phonenumber&fields=place_id,name&key=API_KEY_HERE

\n\n

响应示例

\n\n
{\n   "candidates" : [\n      {\n         "name" : "\xd7\x9e\xd7\x9c\xd7\x9a \xd7\x94\xd7\xa2\xd7\x95\xd7\xa4\xd7\x95\xd7\xaa",\n         "place_id" : "ChIJ78ko1zBKHRURpwbgUdWc4nU"\n      },\n      {\n         "name" : "Of Yaakov",\n         "place_id" : "ChIJv3myn4FMHRURUGffcXgxKuw"\n      }\n   ],\n   "status" : "OK"\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

注意:\n目前 Android 版 Google Places SDK 中尚不提供此类 API,但您可以直接在应用中使用 HTTP API,也可以在后端创建一个 API 作为 Places API 的代理。我更喜欢更高版本,因为在第一个解决方案中,API 密钥部署在应用程序代码中,黑客可以反编译 APK 并出于恶意原因使用它。出于安全原因,如果您使用后端解决方案,您必须将 API 密钥的使用限制为服务器的 IP 地址!

\n