2010-03-31 6 views
5

I versuchen, die Kontakte auf Emulator vCard-Format unter Verwendung des nachfolgenden CodeFileNotFoundException bei dem Versuch, Kontakt zu konvertieren VCARD

AssetFileDescriptor AFD = openAssetFileDescriptor (Contacts.CONTENT_VCARD_URI, "r")

Der Stapel zu konvertieren Trace sagt java.io.FileNotFoundException Keine Datei unter content: //com.android.contacts/contacts/as_vcard

Müssen wir eine Datei an den URI anhängen? Gibt es eine andere Möglichkeit, Kontakte in Vcard in Android zu konvertieren?

+0

Ich hoffe, diese Antwort wird Ihnen helfen: "[Android get vCard Daten von Intent] [1]" [1]: http://stackoverflow.com/questions/12659323/android -get-vcard-Daten-von-Absicht/12771561 # 12771561 –

Antwort

2

Sie müssen durch die Kontakt-Datenbank iterieren und openAssetFileDescriptor() auf jedem einzeln aufrufen. Der wichtige Teil besteht darin, dass Sie den Suchschlüssel für jeden Kontakt verwenden und ihn mit der Methode URI.withApendedPath() an CONTENT_VCARD_URI anhängen müssen.

1

Ich bin gerade mit diesem auch gestolpert. Hier ist ein Weg, es zu tun. 1. Lassen Sie den Benutzer seinen Kontakt auswählen oder KontaktUri auf andere Weise erhalten.

Nachdem Sie den KontaktUri haben, suchen Sie den Lookup_key und danach können Sie die Vcard abrufen. Hier ist der Code, den ich verwendet habe, nachdem ich die contactUri (Art der Kopie einfügen aus verschiedenen Funktionen, sollte aber funktionieren).

Cursor cursor = resolver.query(contactUri, new String[] { 
    Contacts.LOOKUP_KEY 
}, null, null, null); 
FileInputStream input = null; 

try { 
    if (cursor.moveToFirst()) { 
     return cursor.getString(0); 
    } else return; 

    AssetFileDescriptor afd = context.getContentResolver().openAssetFileDescriptor(
      Uri.withAppendedPath(Contacts.CONTENT_VCARD_URI, lookupKey), "r"); 
    input = afd.createInputStream(); 

    int ch; 
    StringBuffer strContent = new StringBuffer(""); 
    while ((ch = input.read()) != -1) 
     strContent.append((char) ch); 

    Log.d(TAG, strContent.toString()); 
} finally { 
    cursor.close(); 
    if (input != null) { 
     input.close(); 
    } 
} 
Verwandte Themen