LINUX.ORG.RU
ФорумMobile

Как определить поставщика приложения (+немного ЖЖ про форматы контактов)

 , , , ,


0

2

Привет, ЛОР.

Я подобные вопросы уже в своё время задавал, но сейчас вопрос встал особенно остро.

Есть телефон, Samsung A50. На нём есть приложение «Контакты». В настройках, в разделе "О приложении «Контакты» указана только версия - 10.2.30.15. Производитель не указан. Как бы мне понять, чьи это «Контакты», то ли самсунга, то ли гугла (AOSP или, может, не совсем O), то ли ещё чьи-то?

Понадобилось это мне в данном случае вот для чего. В большинстве современных (что особенно весело) андроидских телефонов, с которыми я сталкивался, при экспорте-импорте файлов VCF используется древняя, как говно мамонта, спецификация vCard 2.1, несмотря на то, что уже давно выпустили vCard 3.0 и даже vCard 4.0. Хорошо узнаваемая особенность vCard 2.1 состоит в том, что все не-ASCII символы, в том числе русские, оборачиваются в QUOTED-PRINTABLE, в то время как более новые версии предписывают писать некодированный UTF-8 прямо в файл. Для обозначения этого факта предусмотрен атрибут ENCODING. В стандарте он описан как an alternate encoding for a value, value — это то, что в vCard-тегах находится справа от двоеточия (имя, телефон, емейл и т.д.).

А вот то, что слева от двоеточия, видимо, предполагалось быть чисто латинским. Предполагалось, да.

Но вот к примеру, у телефонов, почтовых адресов, электронных адресов и др. есть типы. Есть некий стандартный список этих типов, который от одной версии vCard к другой перетряхивался, плюс есть возможность добавлять нестандартные типы. Если вы у себя в андроидфоне добавите к контакту телефон нестандартного типа, например, DELIVERY, в VCF он сохранится как X-DELIVERY, это штатная ситуация.

Нештатная ситуация начинается, когда имена этих нестандартных типов делают нелатинскими. Приложение адресной книги это позволяет. Вот только обрабатывает полученный результат не всегда корректно (вероятно, как раз потому, что на левую часть vCard-тега действие атрибута ENCODING не распространяется). К примеру, при экспорте книги с таким телефоном номер телефона сохранится, а имя типа с большой вероятностью обрежется, и разглядывая полученный файл, вы уже не поймёте, какой из номеров контакта «СТАРЫЙ», а какой «НОВЫЙ».

Поэтому я всегда советовал: если делаете нестандартные типы номеров — делайте их хотя бы на латинице.

Но вот, выгнав vcf-файл из упомянутого выше гнусмаса A50, я с интересом обнаружил там такую строку:

TEL;X-CUSTOM(CHARSET=UTF-8,ENCODING=QUOTED-PRINTABLE,=D0=94=D0=98=D0=A1=D0=9F=D0=95=D0=A2=D0=A7=D0=95=D0=A0):+79031234567

То есть кто-то наконец предложил решение. Пока нестандартное. Но уже заслуживающее того, чтобы научить DoubleContact его понимать. Даже если это самсунг — производитель достаточно именитый. Для филипсов и нокий (древних) я в своей программе кое-какую специфику обрабатываю, почему бы и для самсунга (современного) не обработать…

Собственно, что хотелось бы уточнить.

  1. Как бы понять, чьи это «Контакты» — самсунга или гугла? (Возвращаемся к началу темы.)

  2. А может, за это вообще отвечает не приложение, а некая системная либа, которую приложение со своим экспортом просто дёргает? (Понять бы ещё, какая.)

  3. Может, кому-то конструкция X-CUSTOM попадалась на других телефонах, не от Самсунга? Тогда всё ещё лучше.

★★★★★

Ответ на: комментарий от Pups

Спасибо!

Что интересно — судя по номенклатуре классов, либа умеет во все три известные версии vCard (за это, как я понял, отвечает метод getAppropriateParser класса VCardParser). Тогда где же задаётся версия, используемая конкретным телефоном? В пользовательских настройках, вроде, не нашёл такого.

Ну и о грустном — упоминания X-CUSTOM (ради чего весь балаган затевался) не нашёл. Надо искать где-то в другом месте.

hobbit ★★★★★
() автор топика

Как бы мне понять, чьи это «Контакты», то ли самсунга, то ли гугла (AOSP или, может, не совсем O), то ли ещё чьи-то?

Посмотреть название пакета через adb, например?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.