Как приложение «Телефон» отображает информацию о контактах, которых нет в адресной книге? - PullRequest
0 голосов
/ 02 марта 2019

Фон

В приложении Google " Телефон " есть опция "Идентификатор звонящего по телефону и спам":

enter image description here

Итак, если вам звонит кто-то или какая-либо организация, которой нет в адресной книге, но она как-то идентифицирована, вы получите имя для нее, как таковое (называется "+ 972-035283487"):

enter image description here

Начиная с Android M (6.0 - API 23), приложения могут заменить приложение телефона по умолчанию, изатем также предоставляя альтернативный пользовательский интерфейс, когда вы звоните кому-либо или получаете телефонный звонок, расширяя класс InCallService , как показано здесь , который основан на здесь .

Проблема

Я хочу попытаться показать ту же информацию, что и в приложении «Телефон», то есть имя человека / компании в случае, если она его определила (а ее нет в адресной книге).).

То, что я пробовал

Я пытался покопаться в различных вещах, которые я получаю через API номеронабирателя, но не получилось:

  1. Различные поля и функции: android.telecom.Call class

  2. Существует getDetails внутри класса Call, поэтому я попытался выяснить, что там внутри, а также есть statusHints и " label "внутри" statusHints ".Ни у одного из них не было никакой информации (возвращено ноль).Причина, по которой я попытался взглянуть на «statusHints», заключается в том, что вот что я вижу в документах:

Содержит метку состояния и значок, отображаемый в интерфейсе пользователя во время вызова.

В приложении «Телефон» нажатие «Узнать больше» приводит к переходу на веб-сайт ( здесь ), полный ссылок, которые, как мне кажется, могут быть источниками данных, но я не думаю, что само приложениеиспользует это.Вместо этого я думаю, что он использует что-то от Google.

Вопросы

  1. Возможно ли получить эту информацию CallerId?Если да, то как?

  2. Как приложение «Телефон» делает это?Он должен быть с открытым исходным кодом, поэтому должно быть что-то, что дает ему эту информацию, верно?Будет ли клонирование это как-то получить эту информацию?Может быть, у Google есть собственный сервис для CallerID?

  3. Для чего используются "callDetails" и "statusHints"?Что они предоставляют?

Ответы [ 5 ]

0 голосов
/ 11 марта 2019

Вы можете проверить работу таких приложений, как Truecaller, для этого.Truecaller действует по сценарию «давай и бери» ... Вы хотите, чтобы эти неизвестные номера затем были разделены с контактами вашей телефонной книги. Теперь, очевидно, каждый, кто установил приложение, сдал свою телефонную книгу.Данные получены из миллионов пользователей, которые загрузили приложение truecaller на свои смартфоны.В рамках соглашения с конечным пользователем приложение truecaller просит пользователя разрешить доступ к адресной книге / контактам пользователя на смартфоне.Эти данные затем загружаются приложением на серверы компании.После прохождения нескольких алгоритмов сопоставления / уточнения данных, эти данные становятся доступными для поиска среди всех пользователей по-настоящему.

0 голосов
/ 11 марта 2019

Google Приложение для телефона по умолчанию имеет функцию Использовать идентификатор звонящего и защиту от спама.Некоторые из этих действий работают только на Android 6.0 и более поздних версиях.

Когда вы делаете или получаете вызов с включенным идентификатором вызывающего абонента и защитой от спама, вы можете видеть информацию о звонящих или не посещаемых вами организациях.контакты или предупреждения о потенциальных спам-звонках.

Чтобы использовать идентификатор звонящего и защиту от спама, вашему телефону может потребоваться отправить информацию о ваших звонках в Google.

Включите идентификацию звонящего и защиту от спамавыключено или включено

Идентификатор звонящего и защита от спама включены по умолчанию.Вы можете отключить его.

Чтобы использовать идентификатор звонящего и защиту от спама, вашему телефону может потребоваться отправить информацию о ваших звонках в Google.Он не контролирует, отображается ли ваш номер при совершении звонков.

Идентификатор вызывающего абонента от Google показывает названия компаний и служб, перечисленных в Google My Business.Он также ищет совпадения в любом каталоге, в котором отображается информация о вызывающем абоненте для рабочих или школьных учетных записей.

Согласно вашему решению, Google не предоставляет такую ​​поддержку, как вы хотите.вам нужно создать собственную функцию и сохранить спам и другие контактные данные на своей стороне.

0 голосов
/ 07 марта 2019

Я полагаю, что у Google есть своя собственная база данных о спам-звонках, и приложение "Телефон" отправляет номер на свой сервер, и в случае совпадения показывает имя.

Может быть Если ваше приложение может читать уведомления, есть возможность получить это имя.Попробуйте этот пример и измените его в соответствии с вашими потребностями

0 голосов
/ 07 марта 2019

Я пытался декомпилировать приложение 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/
0 голосов
/ 06 марта 2019

Я считаю, что родное приложение Android для телефона использует API поиска мест от Google.Поскольку вы можете легко найти место по номеру телефона и получить такие сведения о месте, как имя, идентификатор места, адрес formatted_address и многие другие поля, которые вы можете найти в документации

ЗапросURL : https://maps.googleapis.com/maps/api/place/findplacefromtext/json

Метод запроса : GET

Параметры запроса запроса :

  • ключ : ключ API вашего приложения.
  • ввод : ввод текста, указывающий место для поиска (например, имя или номер телефона ).
  • inputtype : Тип ввода.Это может быть один из текстовых запросов или номер телефона .Номера телефонов должны быть в международном формате (с префиксом «плюс» («+»), после которого следует код страны, а затем сам номер телефона).

Пример запроса : 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 в настоящий момент недоступен в Google размещает SDK для Android, ноВы можете использовать HTTP API непосредственно в своем приложении или сделать API в бэкэнде в качестве прокси для API мест.Я предпочитаю более позднюю версию, поскольку в первом решении ключ API развернут в коде приложения, и хакеры могут декомпилировать APK и использовать его по злонамеренным причинам.Из соображений безопасности вы должны ограничить использование ключа API IP-адресом сервера, если вы используете серверное решение!

...