13

Estoy tratando de agregar un nuevo contacto a los contactos de Android 2.2 directamente.Insertar contacto en Android con ContactsContract

//this code doesn't work  
ContentValues cv=new ContentValues(); 
cv.put(ContactsContract.Contacts.DISPLAY_NAME, "TESTEST"); 
Uri u= getContentResolver().insert(ContactsContract.Contacts.CONTENT_URI, cv); 

me envía el error "Los contactos globales se crean automáticamente." ¿Qué estoy haciendo mal?

Para esto se necesitan formulario de contacto complemento del androide:

//this code works but it's not ideal 
Intent i = new Intent(Intent.ACTION_INSERT_OR_EDIT); 
i.setType(Contacts.CONTENT_ITEM_TYPE); 
i.putExtra(Insert.NAME, "TESTTEST"); 
i.putExtra(Insert.PHONE, "209384"); 
startActivity(i); 

no puedo encontrar la manera de enviar un nombre y un apellido - Sólo un 'nombre', que se pone en la primera nombre de Caja. También me gustaría separar el código postal en la calle, la ciudad, el estado y el código postal, que en este momento se está colocando en el buzón de la calle.

Respuesta

3

Problema resuelto. Encontré esta pregunta; la respuesta es trabajar por Als: Inserting contacts in Android 2.2

+4

Por lo que yo puedo decir, la "respuesta de trabajo", añade el contacto directo. Sin embargo, en su pregunta anterior, está iniciando la actividad nativa de "agregar contacto" a través de un intento. ¿Esto significa que ha descubierto cómo pasar los datos de contacto a través de ContactsContract? Si es así, ¿te importaría compartir cómo lo hiciste? – Dino

2

Esta respuesta parece ser útiles: https://stackoverflow.com/a/3279117/1259161

En él se describe cómo invocar el formulario de inscripción contactos utilizando la API ContractsContract. Estas API también deberían permitirle hacer uso de ContactsContract.CommonDataKinds.StructuredPostal para especificar los campos adicionales que desea.

20

Agregar Contacto en Android

import java.util.ArrayList; 

import android.app.Activity; 
import android.content.ContentProviderOperation; 
import android.content.ContentProviderResult; 
import android.content.OperationApplicationException; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.RemoteException; 
import android.provider.ContactsContract; 
import android.provider.ContactsContract.CommonDataKinds.Phone; 
import android.provider.ContactsContract.CommonDataKinds.StructuredName; 
import android.provider.ContactsContract.Contacts.Data; 
import android.provider.ContactsContract.RawContacts; 

public class DemoAddAddressBook extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    /* 
    * Uri newPerson = addContactName(); 
    * 
    * addMobilePhoneNo(newPerson); addEmail(newPerson); 
    * addPostalAddress(newPerson); addOrganization(newPerson); 
    */ 

    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 
    int rawContactInsertIndex = ops.size(); 

    ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI) 
    .withValue(RawContacts.ACCOUNT_TYPE, null) 
    .withValue(RawContacts.ACCOUNT_NAME, null).build()); 

    //Phone Number 
    ops.add(ContentProviderOperation 
    .newInsert(ContactsContract.Data.CONTENT_URI) 
    .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 
     rawContactInsertIndex) 
    .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) 
    .withValue(Phone.NUMBER, "9X-XXXXXXXXX") 
    .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) 
    .withValue(Phone.TYPE, "1").build()); 

    //Display name/Contact name 
    ops.add(ContentProviderOperation 
    .newInsert(ContactsContract.Data.CONTENT_URI) 
    .withValueBackReference(Data.RAW_CONTACT_ID, 
     rawContactInsertIndex) 
    .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE) 
    .withValue(StructuredName.DISPLAY_NAME, "Mike Sullivan") 
    .build()); 
    //Email details 
    ops.add(ContentProviderOperation 
    .newInsert(ContactsContract.Data.CONTENT_URI) 
    .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 
     rawContactInsertIndex) 
    .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE) 
    .withValue(ContactsContract.CommonDataKinds.Email.DATA, "[email protected]") 
    .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE) 
    .withValue(ContactsContract.CommonDataKinds.Email.TYPE, "2").build()); 


    //Postal Address 

    ops.add(ContentProviderOperation 
     .newInsert(ContactsContract.Data.CONTENT_URI) 
     .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 
     rawContactInsertIndex) 
     .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE) 
     .withValue(ContactsContract.CommonDataKinds.StructuredPostal.POBOX, "Postbox") 

     .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE) 
     .withValue(ContactsContract.CommonDataKinds.StructuredPostal.STREET, "street") 

     .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE) 
     .withValue(ContactsContract.CommonDataKinds.StructuredPostal.CITY, "city") 

     .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE) 
     .withValue(ContactsContract.CommonDataKinds.StructuredPostal.REGION, "region") 

     .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE) 
     .withValue(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, "postcode") 

     .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE) 
     .withValue(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY, "country") 

     .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE) 
     .withValue(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, "3") 


     .build()); 


    //Organization details 
    ops.add(ContentProviderOperation 
    .newInsert(ContactsContract.Data.CONTENT_URI) 
    .withValueBackReference(Data.RAW_CONTACT_ID, 
     rawContactInsertIndex) 
    .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE) 
    .withValue(ContactsContract.CommonDataKinds.Organization.COMPANY, "Devindia") 
    .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE) 
    .withValue(ContactsContract.CommonDataKinds.Organization.TITLE, "Developer") 
    .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE) 
    .withValue(ContactsContract.CommonDataKinds.Organization.TYPE, "0") 

    .build()); 
    //IM details 
    ops.add(ContentProviderOperation 
     .newInsert(ContactsContract.Data.CONTENT_URI) 
     .withValueBackReference(Data.RAW_CONTACT_ID, 
     rawContactInsertIndex) 
     .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE) 
     .withValue(ContactsContract.CommonDataKinds.Im.DATA, "ImName") 
     .withValue(Data.MIMETYPE, ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE) 
     .withValue(ContactsContract.CommonDataKinds.Im.DATA5, "2") 


     .build()); 
    try { 
    ContentProviderResult[] res = getContentResolver().applyBatch(
    ContactsContract.AUTHORITY, ops); 
    } catch (RemoteException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } catch (OperationApplicationException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 

} 
} 
+0

eres mi salvador del día !! +1 y muchas gracias !! –

+0

Esto funcionará con varios teléfonos/correos electrónicos/... también, ¿no? Además, ¿de dónde sacaste todo? ¿Hay más campos que se pueden usar, que no se mencionan aquí (la respuesta fue hace 4 años, entonces creo que las cosas podrían haber cambiado)? –

+0

¿Por qué usar "rawContactInsertIndex", si siempre es 0 ....? –

1
ContentValues p=new ContentValues(); 
    p.put(RawContacts.ACCOUNT_TYPE, "com.google"); 
    p.put(RawContacts.ACCOUNT_NAME, "email"); 
    Uri rowcontect= getContentResolver().insert(RawContacts.CONTENT_URI, p); 
    long rawcontectid=ContentUris.parseId(rowcontect); 

    ContentValues value = new ContentValues(); 
    value.put(Data.RAW_CONTACT_ID,rawcontectid); 
    value.put(android.provider.ContactsContract.Data.MIMETYPE,StructuredName.CONTENT_ITEM_TYPE); 
    value.put(StructuredName.DISPLAY_NAME, "kunja gajjar"); 
    getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, value); 

    //adding the contents to the data 
    ContentValues ppv=new ContentValues(); 
    ppv.put(android.provider.ContactsContract.Data.RAW_CONTACT_ID, rawcontectid); 
    ppv.put(android.provider.ContactsContract.Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE); 
    ppv.put(Phone.NUMBER, "975657789"); 
    ppv.put(Phone.TYPE, Phone.TYPE_MOBILE); 
    this.getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, ppv); 
1
ContentValues cv = new ContentValues(); 
cv.put(People.NAME, e1.getText().toString()); 

// e1.getText().tostring() is Contact name 

Uri u = getContentResolver().insert(People.CONTENT_URI, cv); 

Uri pathu = Uri.withAppendedPath(u, People.Phones.CONTENT_DIRECTORY);  

cv.clear(); 

cv.put(People.NUMBER, e2.getText().toString()); 

// e2.getText().tostring() is Contact number 

getContentResolver().insert(pathu, cv); 

Toast.makeText(getApplicationContext(), "Contact Added",Toast.LENGTH_LONG).show(); 
Cuestiones relacionadas