Получите телефонные контакты без фотографий, чтобы сохранить их в DataOutputStream (формат vcf)

У меня есть приложение, которое экспортирует контакты телефона на SD-карту в формате vcf.

Я могу получить все vcards и сохранить их в формате vcf (зацикливая каждый ContactsContract.Contacts.LOOKUP_KEY до тех пор, пока не будет достигнуто значение счетчика курсора -1, чтобы поместить vcard, относящуюся к каждому контакту, в AssetFileDescriptor, а затем преобразуется в FileInputStream с помощью getContentResolver().openAssetFileDescriptor(....) ). Проблема в том, что теперь мне нужно сохранить vcards без фото.

Итак, есть идеи, как получить контакты без их фото, чтобы сохранить их на внешнем хранилище в формате vcf?

заранее спасибо


person Nabz    schedule 19.02.2014    source источник
comment
Клонировать нефотографические данные из существующих vcards в пустые vcard перед сохранением?   -  person Ceiling Gecko    schedule 19.02.2014
comment
@CeilingGecko не понял твоей идеи   -  person Nabz    schedule 19.02.2014
comment
@AndroidNabs Я думаю, он имел в виду, что вы должны создать новую vcard для каждой vcard и скопировать все данные, кроме изображения, и сохранить новую vcard.   -  person Ori Wasserman    schedule 19.02.2014
comment
@OriWasserman Я понял, но вам не кажется, что это сложный и тяжелый метод для устройства? Я ищу способ запросить все строки контактов без строки фотографий. Есть ли способ сделать это?   -  person Nabz    schedule 19.02.2014


Ответы (1)


API уровня 14+

Если вы проверите источник для ContactsContract.java, вы можете видеть, что они представили новый способ исключения фотографии контакта.

/**
 * Boolean parameter that may be used with {@link #CONTENT_VCARD_URI}
 * and {@link #CONTENT_MULTI_VCARD_URI} to indicate that the returned
 * vcard should not contain a photo.
 *
 * @hide
 */
 public static final String QUERY_PARAMETER_VCARD_NO_PHOTO = "nophoto";

Константа скрыта от API (@hide), но вы все равно можете ею воспользоваться.

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

String lookupKey = cursor.getString(
                 cursor.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));
Uri vcardUri = ContactsContract.Contacts.CONTENT_VCARD_URI
             .buildUpon().appendQueryParameter("nophoto", String.valueOf(true))
             .build();
Uri uri = Uri.withAppendedPath(vcardUri, lookupKey);


Предварительный уровень API 14

Единственным решением будет создание собственных визитных карточек с использованием контактной информации.

Эта библиотека может помочь.

person Benito Bertoli    schedule 20.02.2014
comment
ваш метод работает как шарм, я буду использовать параметр nophoto для API 14, и я буду обрабатывать API 14, обрабатывая vcards с использованием внешних библиотек. Спасибо за вашу помощь - person Nabz; 20.02.2014