google from android android-contacts

google - transfer contacts from android to android



Insertar contactos en Android 2.2 (3)

Para tener un contacto visible creado, debe pertenecer a un grupo visible. Eche un vistazo a los contactos de Gmail en su computadora para ver grupos y visibilidad.

Para encontrar un grupo visible en el dispositivo, haga algo como esto:

Long myContactsGroupId = null; sqlWhere = ContactsContract.Groups.ACCOUNT_TYPE + " = ''com.google'' AND " + ContactsContract.Groups.GROUP_VISIBLE + " = 1"; Cursor cursor = getContentResolver().query(ContactsContract.Groups.CONTENT_URI, new String[] {"_id"}, sqlWhere, null, "_id"); if (cursor.moveToFirst()) { myContactsGroupId = cursor.getLong(0); }

Para agregar el grupo a rawContact:

cv.clear(); cv.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE); cv.put(ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID, myContactsGroupId); cv.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId); getContentResolver().insert(ContactsContract.Data.CONTENT_URI, cv);

O la versión ops:

ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE) .withValue(ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID, myContactsGroupId) .build());

@ anqe1ki11er:

No entiendo el 3er párrafo en su respuesta donde dice:

values.put (Data.MIMETYPE, Data.CONTENT_TYPE) ...

No hay tal MIMETYPE. (Lo comprobé en HTC Desire con HTC Android 2.2).

Gracias.

Estoy tratando de insertar nuevos contactos de RawContact , pero RawContact agregado no se muestra cuando veo los contactos a través de Contactos o agenda telefónica. Como entiendo si creamos un RawContact y no hay ningún contacto asociado, el contacto se insertará automáticamente. Obtengo un valor válido de rawContactId y no se lanzan excepciones, por lo que asumo que la inserción fue exitosa. ¿Estoy haciendo algo mal o me estoy perdiendo algo? Estoy usando el ejemplo de código del sitio del desarrollador, simplemente pegándolo aquí:

ContentValues values = new ContentValues(); values.put(RawContacts.ACCOUNT_TYPE, accountType); values.put(RawContacts.ACCOUNT_NAME, accountName); 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);


Pensé que esta Q había sido olvidada hace tiempo, pero como alguien la votó por alto, supongo que alguien más también enfrenta el mismo problema que yo. Después de un pequeño forcejeo pude descifrar el problema e insertar contactos, espero que esto ayude, aquí está el código de muestra:

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()); 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") .build()); 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()); ContentProviderResult[] res = getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);


Un cliente me informó que la solución en la respuesta anterior (por Als) no funciona en algunos dispositivos HTC. Entonces, después de unos días de frustración, se me ocurrió esta solución:

String name = "First Family"; String phone = "0123456789"; ContentValues values = new ContentValues(); values.put(Data.DISPLAY_NAME, name); Uri rawContactUri = c.getContentResolver().insert(RawContacts.CONTENT_URI, values); long rawContactId = ContentUris.parseId(rawContactUri); long contactId = Util.getContactId(c, rawContactId); System.out.println("rawContactId = " + rawContactId); System.out.println("contactId = " + contactId); values.clear(); values.put(Phone.NUMBER, phone); values.put(Phone.TYPE, Phone.TYPE_OTHER); values.put(Phone.MIMETYPE, Phone.CONTENT_ITEM_TYPE); values.put(Data.RAW_CONTACT_ID, rawContactId); c.getContentResolver().insert(Data.CONTENT_URI, values); values.clear(); values.put(Data.MIMETYPE, Data.CONTENT_TYPE); values.put(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name); values.put(Data.RAW_CONTACT_ID, rawContactId); c.getContentResolver().insert(Data.CONTENT_URI, values); values.clear(); values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE); values.put(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name); values.put(Data.RAW_CONTACT_ID, rawContactId); c.getContentResolver().insert(Data.CONTENT_URI, values); public static long getContactId(Context context, long rawContactId) { Cursor cur = null; try { cur = context.getContentResolver().query(ContactsContract.RawContacts.CONTENT_URI, new String[] { ContactsContract.RawContacts.CONTACT_ID }, ContactsContract.RawContacts._ID + "=" + rawContactId, null, null); if (cur.moveToFirst()) { return cur.getLong(cur.getColumnIndex(ContactsContract.RawContacts.CONTACT_ID)); } } catch (Exception e) { e.printStackTrace(); } finally { if (cur != null) { cur.close(); } } return -1l; }