2010-10-20 7 views
1

en utilisant l'API J'essaie de créer un contact, en utilisant l'API 2.x et non l'ancienne. Ici http://developer.android.com/guide/topics/providers/content-providers.html il explique seulement l'ancienne API. Je n'ai trouvé aucun didacticiel, exemple, etc. montrant comment créer un contact. Pour autant que je l'ai compris, je dois créer un contact cru, en contacts premières, j'ai trouvé http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.html à partir de là j'ai essayéAndroid: Créer une API de contact 2.x

ContentValues values = new ContentValues(); 
values.put(RawContacts.ACCOUNT_TYPE, accountType); //accountType = "xxxx" 
values.put(RawContacts.ACCOUNT_NAME, accountName); //accountName = "aaaa" 
Uri rawContactUri = getContentResolver().insert(RawContacts.CONTENT_URI, values); 
long rawContactId = ContentUris.parseId(rawContactUri); 
values.clear(); 
values.put(Data.RAW_CONTACT_ID, rawContactId); 
values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE); 
values.put(StructuredName.DISPLAY_NAME, "Mike Sullivan"); 
getContentResolver().insert(Data.CONTENT_URI, values); 

La dernière ligne de code montre que « Data.CONTENT_URI » ne peut pas être résolu. Il semble un peu que cette ligne de code est pour l'API 1.6, j'ai changé le Data.CONTENT_URI à ContactsContract.Data.CONTENT_URI. Au moins, le code compile et s'exécute, mais je n'ai toujours pas de contact Mike Sullivan dans mon carnet d'adresses par la suite. J'ai échangé maintenant aussi bien l'autre "Data" avec "ContactsContract.Data" toujours aucun changement.

Est-ce que quelqu'un a un exemple facile comment créer une personne dans le carnet d'adresses sur 2.x?

Modifier: J'ai fait quelques progrès, il semble que j'ai toujours besoin d'un compte sur mon téléphone pour ajouter un contact. Mon téléphone dispose du type de compte com.google et du nom de compte [email protected] L'émulateur n'a rien. Je me demande à quel compte je dois ajouter mes contacts? Puis-je supposer que j'ai TOUJOURS exactement un compte Gmail et que je prends celui-ci?

Répondre

0

Vous cherchez quelque chose comme ça?

{ // insert a new data item 
    // first we need to get a raw contact corresponding to the contact. 
    Cursor rawCur = getContentResolver().query(RawContacts.CONTENT_URI, 
     new String[]{RawContacts._ID}, 
     RawContacts.CONTACT_ID + "=?", 
     new String[]{String.valueOf(contactId)}, null); 

    long rawContactId = -1; 
    for (boolean moreRaws = rawCur.moveToFirst(); moreRaws; 
     moreRaws = rawCur.moveToNext()) 
    { 
     rawContactId = rawCur.getLong(rawCur.getColumnIndex(RawContacts._ID)); 
    } 

    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();  

    ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
     .withValue(ContactsContract.Data.RAW_CONTACT_ID, rawContactId) 
     .withValue(ContactsContract.Data.MIMETYPE, 
        ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) 
     .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER,"y123-456-7890") 
      .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, 
        ContactsContract.CommonDataKinds.Phone.TYPE_FAX_HOME) 
     .build()); 

    try { 
     ContentProviderResult[] results = 
        getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 
     logger.info("result: "+results[0]); 
    } catch (UnsupportedOperationException ex) { 
     ex.printStackTrace(); 
    } catch (RemoteException ex) { 
     ex.printStackTrace(); 
    } catch (OperationApplicationException ex) { 
     ex.printStackTrace(); 
    } 
    } 
Questions connexes