android contacts contactscontract rawcontacts

android - ¿Cuál es la diferencia entre contactos y contactos en bruto?



contacts contactscontract (2)

Esta diferencia se debe a que RawContacts se fusionó con Contacts debido a la regla de agregación.

Usted agrega un contacto a RawContacts mientras la lista muestra Contactos. De ahí la diferencia de la cuenta.

Por favor, encuentre alguna descripción entre Contacts , Contacts y Data aquí . Aunque la pregunta es diferente, es posible que pueda obtener la diferencia entre Contacts y Contacts RawContacts .

Tengo una utilidad de "volcado" que estoy usando para estudiar el ContactsContract ya que no lo consigo en la documentación. Cuando vuelco los contactos, cuenta con 263 registros en la tabla, sin embargo, la aplicación de contactos en mi dispositivo muestra que tengo 244 ("Mostrando 244 contactos").

¿Alguien puede explicar la discrepancia?

La aplicación Contactos de mi Sprint LG tiene opciones de visualización para cada una de las cuentas que sincronizo y he ingresado y revisado todas, por lo que no debería haber ningún filtro.

El URI principal que estoy usando en la utilidad es:

Uri uriRawContacts = ContactsContract.RawContacts.CONTENT_URI; String[] projection = new String [] { ContactsContract.RawContactsEntity._ID, ContactsContract.RawContactsEntity.CONTACT_ID, ContactsContract.RawContactsEntity.DELETED, ContactsContract.RawContactsEntity.AGGREGATION_MODE, }; Cursor cursorRaw = cr.query(uriRawContacts, projection, null, null, null); DumpCursor.dumpAnyCursor(getApplicationContext(), "RawContacts", cr, cursorRaw, ",");

Seguido por (para cada _ID en la consulta anterior):

long rawContactId = Long.parseLong(anyCursor.getString(anyCursor.getColumnIndex(RawContacts.CONTACT_ID))); Uri rawContactUri = ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId); Uri entityUri = Uri.withAppendedPath(rawContactUri, Entity.CONTENT_DIRECTORY); Log.d(TAG, "rawContactUri: " + rawContactUri.toString()); Log.d(TAG, "entityUri: " + entityUri.toString()); Cursor c = cr.query(entityUri, new String[] { RawContacts.SOURCE_ID, Entity.DATA_ID, Entity.MIMETYPE, Entity.DATA1 }, null, null, null);

Luego recorro la primera consulta, muestro todas las columnas en mi proyección, luego, utilizando el campo _ID en el bucle de la primera consulta, emito la segunda consulta y vuelco todas sus columnas.

Las balas de la respuesta se transponen aquí para mayor comodidad: consulte la referencia para una explicación más detallada. Más específicamente, se recomienda leer sobre las reglas de agregación. Ref: Haga clic aquí para ver el texto original citado que sigue

  • La base de datos de Contactos se divide en 3 tablas de contactos, contactos en bruto y datos.
  • Cada tabla contiene la columna (_ID), que es un elemento primario con incremento automático
    llave.
  • La tabla de datos contiene toda la información de contacto como número de teléfono, identificación de correo,
    dirección etc.
  • Los contactos en bruto apuntan al contacto real creado. Por lo tanto, utilizamos los contactos en bruto al agregar un contacto.
  • El usuario no puede agregar ningún dato en la tabla de contactos. Los datos en este
    tabla se rellena internamente debido a
    Agregación de contactos.

La razón por la que su lógica funcionó para algunos de los contactos es: _ID para contactos, los contactos sin procesar siguen siendo los mismos hasta que se produce una agregación de contactos. Digamos que agrega dos contactos con el mismo nombre abc. Aquí, el _ID para contactos en bruto se incrementa dos veces, mientras que _ID para contactos se incrementa solo una vez, ya que estos dos contactos se fusionan debido a la agregación de contactos


Las tres tablas son referidas comúnmente por los nombres de sus clases de contrato. Las clases definen constantes para los URI de contenido, los nombres de columna y los valores de columna utilizados por las tablas:

ContactsContract.Contacts tabla: - Filas que representan a diferentes personas, basadas en agregaciones de filas de contactos sin procesar.

Tabla ContactsContract.RawContacts : - Filas que contienen un resumen de los datos de una persona, específicos para una cuenta de usuario y tipo.

ContactsContract.Data table: - Filas que contienen los detalles del contacto directo, como direcciones de correo electrónico o números de teléfono.

para más información click