Как получить Skype ID из Contact DB на Android (мое решение почти в порядке) - PullRequest
0 голосов
/ 26 апреля 2020

Сводка

Я могу получить «Skype ID» / «Имя пользователя Skype», но мое решение не всегда работает, потому что кажется, что контактная база данных приложения Skype делает не всегда содержат (выставить?) «все» данные. Позвольте мне объяснить ситуацию, прежде чем задавать мой вопрос:

1 - Сбор информации из Skype apk

Приложение Skype (apk) содержит /res/xml/contacts.xml, которое содержит

<ContactsDataKind
    android:icon="@ref/0x7f0e0004"
    android:mimeType="vnd.android.cursor.item/com.skype4life.audio"
    android:summaryColumn="data3"
    android:detailColumn="data4" />

<ContactsDataKind
    android:icon="@ref/0x7f0e0004"
    android:mimeType="vnd.android.cursor.item/com.skype4life.video"
    android:summaryColumn="data3"
    android:detailColumn="data4" />

<ContactsDataKind
    android:icon="@ref/0x7f0e0004"
    android:mimeType="vnd.android.cursor.item/com.skype4life.message"
    android:summaryColumn="data3"
    android:detailColumn="data4" />

<ContactsDataKind
    android:icon="@ref/0x7f0e0004"
    android:mimeType="vnd.android.cursor.item/com.skype4life.phone"
    android:summaryColumn="data3"
    android:detailColumn="data4" />

Важные данные здесь эти 4 Skype mimeTypes :

"vnd.android.cursor.item/com.skype4life.phone"
"vnd.android.cursor.item/com.skype4life.message"
"vnd.android.cursor.item/com.skype4life.audio"
"vnd.android.cursor.item/com.skype4life.video"

Примечание: Похоже, они были добавлены около августа 2018 года (см. Здесь http://www.skaip.org/skype-8-27-0-88-for-android)

Еще одна полезная информация заключается в том, что ContactsContract.RawContacts.ACCOUNT_TYPE Skype "com.skype.raider"

2 - Опрос поставщика контента

Используя информацию, полученную в пункте 1, я мог бы запросить Skype ContentProvider (используя выбор ContactsContract. Data.MIMETYPE + "=?" И selectionArgs "com.skype.raider") и получают данные, которые должны быть "интерпретированы" согласно mimeType (один из из 4 Skype mimeTypes , полученных в точке 1).

2.1 - Для mimeType vnd.android.cursor.item/com.skype4life.message я получаю что-то вроде этого:

mimetype = vnd.android.cursor.item/com.skype4life.message
_id = 2773
lookup = 1450iSkype_288
contact_id = 1601
display_name = <Skype User DISPLAY Name HERE>
raw_contact_id = 515
mimetype = vnd.android.cursor.item/com.skype4life.message
data1 = 8:<skype.user.name.value.here>
data2 = null
data3 = Skype
is_primary = 0
data5 = null

Где

<Skype User DISPLAY Name HERE>  is an actual Display Name
<skype.user.name.value.here>    is an actual Skype user name / Skype ID

<skype.user.name.value.here> - это данные, которые я хочу, так что это хорошо!

Важное примечание:

lookup = 1450iSkype_288 можно проанализировать, чтобы получить 288, что RawcontactId какого-то другого контакта! Если у этого rawContact есть contactId, то это позволяет мне найти исходный контакт (против RawContact). Иногда он даже ссылается на некоторый контакт, который НЕ является контактом Google, но, например, контакт WhatsApp! Наслаждайтесь этой важной информацией ;-)

2.2 - Подобные данные для тезисов 2 mimeTypes:

"vnd.android.cursor.item/com.skype4life.audio"
"vnd.android.cursor.item/com.skype4life.video"

Так что я также могу получить <skype.user.name.value.here> . Опять же, это хорошо!

2.3 - Телефон mimeType

"vnd.android.cursor.item/com.skype4life.phone"

не содержит Skype ID (в поле data1), а вместо номера телефона , что имеет смысл.

3 - Проблема

Итак, все это прекрасно работает, и я решил проверить свой код на некоторых других устройствах, где я установил Skype и использовал его с той же учетной записью Skype + та же учетная запись Google и, BOOM , вот проблема:

Поставщик контента Skype имеет только данные для mimeType

"vnd.android.cursor.item/com.skype4life.phone" // <- contains Skype user's phone number, NOT Skype user name / Skype ID

и имеет НЕТ данных для этих 3 типов mimeType

"vnd.android.cursor.item/com.skype4life.message" // <- contains Skype username / ID
"vnd.android.cursor.item/com.skype4life.audio"   // <- contains Skype username / ID
"vnd.android.cursor.item/com.skype4life.video"   // <- contains Skype username / ID

Номера телефонов Skype полезны только для передачи телефонных звонков через Skype, но это не то, что я хочу делать: я хочу передать 'Inte rnet Звонки по Skype / аудио / видео, а не звонки по обычному мобильному телефону.

4 - Вопрос

Почему приложение Skype иногда хранит все 4 Данные mimeTypes «телефон / сообщение / аудио / видео» и иногда только mimeType «телефон»? В последнем случае я не могу получить идентификаторы Skype Id / Skype, например, <skype.user.name.value.here>, о котором я упоминал выше.

Я понимаю, что мое решение является результатом какого-то «метод обратного инжиниринга» и вовсе не является «официальным», но, может быть, кто-то другой провел такое же расследование, которое я проводил, и смог найти решение?

Может быть, есть какой-то Skype syn c настройки ', которые должны быть активированы в приложении Skype или в Android?

Я уже принудительно повторно синхронизирую контакты c для учетных записей Google и Skype, но это не помогло.

Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

Проблема в том, что у вас нет com.skype.raider.permission.ACCOUNT.

, поэтому вы можете запросить их только через ContentProvider или создать индекс для их поиска.

Для пример:

Подобные строки com.skype.android.skypecall.action могут больше не существовать, потому что com.skype.raider/com.skype4life, очевидно, не одно и то же приложение.

0 голосов
/ 27 апреля 2020

Какое замечательное исследование! Я попал сюда, потому что наткнулся на ту же проблему. Я также хочу получить имя пользователя Skype, но в адресной книге присутствует только mimetype "vnd. android .cursor.item / com.skype4life.phone".

Если я посмотрю вашу ссылку, где вы упомяните эти com.skype4life. * добавлены, я также вижу добавление:

sync_adapter_account_type:
= com.skype4life
sync_adapter_authority:
= com.android.contacts

Таким образом, они добавили это вместе. Может быть, мы должны синхронизировать c так или иначе?

...