6

背景

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

在此处输入图像描述

因此,如果您接到不在地址簿上的某人或某个组织的电话,但它以某种方式被识别,您会得到一个名称,例如(称为“+972-035283487”):

在此处输入图像描述

自 Android M (6.0 - API 23) 以来,应用程序可以替换默认的电话应用程序,然后通过扩展InCallService类,还可以在您呼叫某人或接听电话时提供替代 UI,如此处所示基于此处

问题

我想尝试显示与电话应用程序相同的信息,即个人/公司的名称,以防它识别(并且不在通讯簿上)。

我试过的

我试图挖掘通过拨号器的 API 获得的各种东西,但失败了:

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

  2. Call 类中有getDetails,所以我试图获取里面的内容,并且“ statusHints ”中还有statusHints和“ label ”。这些都没有任何信息(返回 null)。我试图查看“statusHints”的原因是因为这就是我在文档中看到的:

包含通话中 UI 中显示的状态标签和图标。

  1. 在“电话”应用程序上,按“了解更多”会转到一个网站(此处),其中包含我认为可能是数据来源的链接,但我认为应用程序本身并不使用它。相反,我认为它使用了谷歌的东西。

问题

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

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

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

4

5 回答 5

2

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

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

请求方法:GET

请求查询参数

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

示例请求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"
}

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

于 2019-03-06T16:01:14.110 回答
1

我试图反编译 Dialer 应用程序,找不到有关应用程序如何执行此操作的具体信息。

但是这个信息可能很有用。请检查一下。

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

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

对于来电显示,请检查此提交

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

这看起来像 lineage os 的拨号器应用程序,它使用不同的服务来查找电话号码,例如

https://auskunft.at/

https://www.dastelefonbuch.de/
于 2019-03-07T07:02:04.210 回答
0

我相信谷歌有自己的垃圾邮件呼叫者数据库,电话应用程序将号码发送到其服务器,如果匹配,它会显示姓名。

也许,如果您的应用程序可以读取通知,则有可能检索该名称。试试这个例子并根据你的需要修改它

于 2019-03-07T06:38:18.497 回答
0

您可以为此检查 Truecaller 等应用程序的工作情况。Truecaller 在一个给予和接受的情况下采取行动......你想要那些未知号码然后你必须与你的电话簿联系人分开。现在显然每个安装了该应用程序的人都交出了他的电话簿。这些数据来自数百万在智能手机上下载了 truecaller 应用程序的用户。作为最终用户协议的一部分,truecaller 应用程序要求用户允许访问智能手机上用户的通讯录/联系人。然后,此数据由应用程序上传到公司的服务器。在经过几种数据匹配/优化算法之后,这些数据可供所有 truecaller 用户搜索。

于 2019-03-11T11:48:44.777 回答
-1

默认情况下, Google Phone 应用程序提供了使用来电显示和垃圾邮件保护的功能。其中一些步骤仅适用于Android 6.0及更高版本。

当您拨打或接听来电显示和垃圾邮件保护的电话时,您可以看到不在您的联系人中的来电者或企业的信息,或关于潜在垃圾邮件来电者的警告。

要使用来电显示和垃圾邮件防护功能,您的手机可能需要向 Google 发送有关您来电的信息。

关闭或重新打开来电显示和垃圾邮件保护

来电显示和垃圾邮件保护默认开启。您可以选择将其关闭。

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

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

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

于 2019-03-11T11:37:40.897 回答