2011-01-04 4 views
7

Мне интересно, есть ли чистый способ импортировать vcard в качестве контакта с андроидом. У меня есть парсер vcard, но отображение каждого возможного поля vcard и типа поля будет болезненным, подверженным ошибкам упражнением. Есть ли способ лучше?android vcard string to contact

Андроид-контакт подозрительно похож на vcard, поэтому я подозреваю, что они используют внутренние карты. для этого нет публичного API.

ответ

10

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

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

Обзоре ContactsContract (заметьте, я вырезал его на месте он упоминает «трехуровневой модели данных») ...

Обзор

ContactsContract определяет расширяемую базу данных контактно связанная информация. Контактная информация хранится в трехуровневой модели данных:

Насколько я могу судить, существует способ «извлечь» визитную карточку, относящуюся к отдельному контакту, но я не знаю одного, чтобы создать свяжитесь с визитной карточкой.

EDIT: WRT импортирует vCards при нажатии на ссылку в браузере - да, хорошая точка. Я могу подтвердить, что он работает при получении vCard по Bluetooth хотя бы (что, конечно, вполне логично). Если я «открываю» vCard на своем телефоне, я получаю «выбор», спрашивающий меня, хочу ли я использовать «Редактор файлов» или «Люди» (приложение для контактов HTC - не уверен, называется ли оно другим на других телефонах). Если есть только одна карточка vCard, она импортируется без дальнейшего запроса. Если их несколько, я получаю еще один выбор, спрашивающий, хочу ли я импортировать One/Multiple/All (Multiple дает другой выбор с флажками, чтобы сделать мой выбор).

В теории, я полагаю, возможно, что у вас есть вся загрузка файлов .vcf, загруженных в каталог где-то, и написать код, который просто создает Intent, чтобы «открыть» один из них и использовать его с startActivity() без указания того, какую деятельность использовать. Я не уверен, какие намерения будут использоваться здесь, но я бы начал с ACTION_VIEW - другие варианты могут быть ACTION_EDIT или (tenuously) ACTION_RUN.

Несмотря на то, что это может работать в известной среде, особенно в одно время, это немного беспорядочно, а поведение/результаты могут отличаться в зависимости от разных телефонов, версий приложений Android и контактов.

EDIT2: WRT, чтобы использовать намерение обрабатывать файлы .vcf, я только пробовал его с моей SD-карты - я понятия не имею, как это сделать, не сохраняя его в первую очередь. Ниже воспроизводит именно то, что я вижу, когда я открываю визитную карточку, который отправляется через Bluetooth ...

Intent i = new Intent(); 
i.setAction(android.content.Intent.ACTION_VIEW); 
i.setDataAndType(Uri.parse("file:///mnt/sdcard/downloads/bluetooth/MickeyMouse.vcf"), "text/x-vcard"); 
startActivity(i); 
+0

, очевидно, это происходит, если вы щелкнете по файлу .vcf в файловом браузере, например. –

+0

@ farble1670: Я собирался ответить как комментарий, но это было слишком долго. См. Точку после EDIT: в моем ответе. – Squonk

+0

спасибо за ваш ответ. похоже, что это стоит того. не могли бы вы представить, как будет выглядеть это намерение? я не совсем понимаю, как бы я указал на намерение в файле. –

0

Я боролся много для импорта контактов в качестве визитной карточки в Android и после того, как тратить много времени, я пришел к есть нет публичных API для импорта контактов.

Единственный способ, насколько мне известно, повторно использовать исходный код Android. Я достиг этого, повторно используя исходный код Android 2.1.

Файлы могут быть переданы из

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.1_r2/android/pim/vcard/exception/VCardException.java/

В правой части проводника вы найдете все файлы, необходимые в папке Пима. Файл, который будет отвечать за запуск процедуры, - ImportVCardActivity.java

Надеюсь, это поможет!