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

时间:2019-03-02 07:49:43

标签: android android-dialer caller-id

背景

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

enter image description here

因此,如果您收到不在地址簿上的某个人或某个组织的呼叫,但是以某种方式被识别,您将为其命名,例如(称为“ + 972-035283487”):< / p>

enter image description here

从Android M(6.0-API 23)开始,应用程序可以替换默认的电话应用程序,然后在您呼叫某人或接到电话时,还可以通过扩展InCallService类来提供备用UI,如{基于here的{3}}。

问题

我想尝试显示与“电话”应用程序上相同的信息,这表示个人/公司的名称,以防万一它(而不是在通讯录上)识别该信息。

我尝试过的

我试图对通过拨号器的API获得的各种信息进行挖掘,但是失败了:

  1. here

  2. 的各种字段和功能
  3. Call类中有android.telecom.Call,因此我尝试获取其中的内容,并且“ {{ 3}}”。这些都没有任何信息(返回null)。我尝试查看“ statusHints”的原因是因为这是我在文档上看到的:

  

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

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

问题

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

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

  3. “ callDetails”和“ statusHints”分别用于什么?他们提供什么?

4 个答案:

答案 0 :(得分:2)

我相信Android的本地电话应用程序正在使用Google的位置搜索API。由于您可以通过其电话号码轻松搜索地点,并获取地点详细信息,例如名称,地点ID,formatted_address以及可以在the documentation

中找到的许多其他字段

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

请求方法:GET

请求查询参数

  
      
  • 密钥:您应用程序的API密钥。
  •   
  • 输入:用于指定要搜索的位置的文本输入(例如姓名或电话号码)。
  •   
  • 输入类型:输入的类型。这可以是   文字查询或电话号码之一。电话号码必须在   国际格式(以加号(“ +”)开头,后跟   国家/地区代码,然后是电话号码本身。
  •   

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

示例响应

{
   "candidates" : [
      {
         "name" : "מלך העופות",
         "place_id" : "ChIJ78ko1zBKHRURpwbgUdWc4nU"
      },
      {
         "name" : "Of Yaakov",
         "place_id" : "ChIJv3myn4FMHRURUGffcXgxKuw"
      }
   ],
   "status" : "OK"
}

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

答案 1 :(得分:1)

我试图反编译Dialer应用程序,找不到有关该应用程序运行方式的特定信息。

但是此信息可能有用。请检查一下。

在Dialer应用程序中,有SpamCallDatabase_Impl.smali SpamCallDatabase.smali类 com.google.android.gms应用程序包中有运行的服务,其中提供了垃圾邮件列表

com.google.android.gms/.telephonyspam.sync.SpamListSyncTaskService 

并为呼叫者ID检查此提交

https://gitlab.e.foundation/e/os/android_packages_apps_Dialer/commit/420eb901ed1d64fdaf055cde4cc46d7a5c0b42fc

这看起来是血统OS的Dialer应用程序 并且它使用不同的服务进行电话号码查找,例如

https://auskunft.at/

https://www.dastelefonbuch.de/

答案 2 :(得分:0)

我相信Google拥有自己的垃圾邮件呼叫者数据库,并且“电话”应用将其号码发送到其服务器,并且如果匹配,它将显示名称。

也许,如果您的应用程序可以读取通知,则可以检索该名称。尝试this示例并根据您的需要进行修改

答案 3 :(得分:0)

默认情况下,为Google Phone app提供了使用呼叫者ID和垃圾邮件保护功能。其中一些步骤仅适用于Android 6.0及更高版本。

拨打或接听带有呼叫者ID和垃圾邮件保护功能的电话时,您会看到联系人中没有的有关呼叫者或企业的信息,或者有关潜在垃圾邮件呼叫者的警告。

要使用呼叫者ID和垃圾邮件保护功能,您的手机可能需要将有关您的呼叫的信息发送给Google。

关闭或重新打开呼叫者ID和垃圾邮件防护功能

默认情况下,呼叫者ID和垃圾邮件保护处于启用状态。您可以选择将其关闭。

要使用呼叫者ID和垃圾邮件保护功能,您的手机可能需要将有关您的呼叫的信息发送给Google。它不控制您拨打电话时是否显示您的号码。

Google的来电显示显示带有“ Google我的商家”列表的公司和服务的名称。它还会在任何显示工作或学校帐户呼叫者信息的目录中查找匹配项。

根据您的解决方案,Google不会根据您的需要提供这种支持。您需要创建自己的功能并在您身边保存垃圾邮件和其他联系方式。