Android: Как сохранить контакты на SDCard как vCard. Без дубликатов?

Я пытаюсь сохранить все контакты на телефоне на SD-карте в виде файла .vcf (vCard). Он работает, но у меня есть проблема. Каждый контакт, который имеет более одного номера телефона (мобильный и рабочий номер), сохраняется дважды. И оба числа находятся в каждом дублированном контакте, поэтому они верны, просто дублируются. Может кто-нибудь, пожалуйста, скажите мне, как исправить эту проблему? Мой код:

File delete=new File(Environment.getExternalStorageDirectory()+"/Contacts.vcf"); if (delete.exists()) { delete.delete(); } Cursor phones = ContactService.this.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null, null, null); phones.moveToFirst(); for(int i =0;i<phones.getCount();i++) { String lookupKey = phones.getString(phones.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY)); Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_VCARD_URI, lookupKey); AssetFileDescriptor fd; try { fd = ContactService.this.getContentResolver().openAssetFileDescriptor(uri, "r"); FileInputStream fis = fd.createInputStream(); byte[] buf = new byte[(int) fd.getDeclaredLength()]; fis.read(buf); String VCard = new String(buf); String path = Environment.getExternalStorageDirectory().toString() + File.separator + vfile; FileOutputStream mFileOutputStream = new FileOutputStream(path, true); mFileOutputStream.write(VCard.toString().getBytes()); phones.moveToNext(); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } 

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

Используйте ниже код для сохранения контактных данных в виде файла vcf на SD-карте устройства.

 public class VCardActivity extends Activity { Cursor cursor; ArrayList<String> vCard; String vfile; static Context mContext; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mContext = VCardActivity.this; getVCF(); } public static void getVCF() { final String vfile = "Contacts.vcf"; Cursor phones = mContext.getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); phones.moveToFirst(); for (int i = 0; i < phones.getCount(); i++) { String lookupKey = phones.getString(phones.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY)); Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_VCARD_URI, lookupKey); AssetFileDescriptor fd; try { fd = mContext.getContentResolver().openAssetFileDescriptor(uri, "r"); FileInputStream fis = fd.createInputStream(); byte[] buf = new byte[(int) fd.getDeclaredLength()]; fis.read(buf); String VCard = new String(buf); String path = Environment.getExternalStorageDirectory().toString() + File.separator + vfile; FileOutputStream mFileOutputStream = new FileOutputStream(path, true); mFileOutputStream.write(VCard.toString().getBytes()); phones.moveToNext(); Log.d("Vcard", VCard); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } } 

И см. Ниже ссылку для получения дополнительной информации.

Экспорт контактов в виде файла VCF

И дайте разрешение ниже в ваш файл androidmanifest.xml .

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

Проверьте двуличие для lookKey