2011-12-19 17 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ファイルに書き込みます。あなたはそれが非常に簡単です、あなたのvCardを生成するには、Androidのクラス「に組み込まれた」を使用したい場合

から読み取りや電子名刺

+0

返信いただきありがとうございます。ハッピーホリデー=) –

2

に書き込むためのhttps://code.google.com/p/android-vcard/を見てみましょう。

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のクラスをダウンロードし、正しいパッケージ名の下に、プロジェクトに追加し、com.android.vcardcom.android.vcard.exceptionする必要があります。 クラスはhereからダウンロードできます。これはAndroid 4.4 r1バージョン用です。

おそらくあなたに遅れているかもしれませんが、誰かが連絡先リストからvcardsを取得し、アンドロイドに内部的にすべての作業を世話するより頑丈で素敵な方法を探している場合は、これがIMOです。

+0

それは私のために働いた!素晴らしい時間の節約! – Markw

関連する問題