2011-12-19 55 views
3

我試圖將所有聯繫人都設置爲vCard。在Android中將所有聯繫人設置爲vcard

所以這是我的代碼:


public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     ContentResolver cr = getContentResolver(); 

     Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, 
         null, null, null, null); 
     if (cur.getCount() > 0) { 
      //cur.moveToFirst(); 
       while (cur.moveToNext()) { 
         try{ 
           String lookupKey = 
cur.getString(cur.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY)); 
           Uri uri = 
Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_VCARD_URI, 
lookupKey); 
           AssetFileDescriptor fd = 
this.getContentResolver().openAssetFileDescriptor(uri, "r"); 
           FileInputStream fis = fd.createInputStream(); 

           byte[] buf = new byte[(int)fd.getDeclaredLength()]; 
           if (0 < fis.read(buf)) 
           { 
             String vCard = new String(buf); 
             System.out.println("The vCard value is " + vCard); 
           } 
           fis.close(); 
         } 
         catch(Exception e) 
         { 
           System.out.println(e.getStackTrace()); 
         } 
       } 
     } 
     cur.close(); 
     System.out.println(cur.getCount()); 
} 
} 

這給了我幾乎所有的聯繫人,但它不會返回一個包含一些特殊的字符一些接觸,在葡萄牙我們說「mãe」(媽媽),這段代碼無法識別它。所有其他的名字,如「António」似乎都沒有。

我被困在這裏很長一段時間。

回答

1

獲得VCard的最佳方式是編寫自己的函數來創建VCard。當聯繫人不是英文時,您使用的方式會遇到問題。 手動獲取聯繫人的所有字段並將其寫入您的VCard文件。

看看https://code.google.com/p/android-vcard/從閱讀,如果你想使用「內置的」機器人類來生成你的電子名片寫到vCard

+0

感謝回覆。節日快樂=) – 2011-12-20 19:55:39

2

,那麼它很簡單。

public ArrayList<String> getContactsAsVcards() 
{ 
    ArrayList<String> vcards = new ArrayList<String>(); 
    VCardComposer vCardComposer = new VCardComposer(context); 

    vCardComposer.init(); 

    do { 
     String vCard = vCardComposer.createOneEntry(); 

     vcards.add(vCard); 
    } while (!vCardComposer.isAfterLast()); 

    return vcards; 

} 

你只需要從Android源代碼下載Android類,並將其添加到您的項目正確的包名下,com.android.vcardcom.android.vcard.exception。 您可以從here下載課程。這是Android 4.4 r1版本。

可能會遲到你,但如果有人正在尋找一個更強大和更好的方式來從他們的聯繫人列表中獲取vcards並讓android內部照顧所有工作,這就是IMO。

+0

它爲我工作!節省時間! – Markw 2014-03-25 22:30:54

相關問題