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 263 registros en la tabla, sin embargo, la aplicación de contactos en mi dispositivo enumera que tengo 244 ("Mostrando 244 contactos")¿Cuál es la diferencia en contactos versus contactos sin formato?
¿Puede alguien explicar la discrepancia?
My Sprint LG's Contacts App tiene opciones de visualización para cada una de las cuentas que sincronizo y las he revisado todas, por lo que no debería haber ningún filtro.
La principal URI 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);
I a continuación, bucle a través de la primera consulta, mostrar todas las columnas en mi proyección, luego, usando el campo _ID en el primer bucle de consulta, emite la segunda consulta y vuelco todas sus columnas.
balas de la respuesta transpuesta aquí por conveniencia: Consulte la referencia para una explicación más detallada. Más específicamente, le recomendamos leer sobre las reglas de agregación. Ref: Click here for the original cited text that follows
- La base de datos de contactos se divide en 3 mesas contactos, primas contactos y datos.
- Cada tabla contiene la columna (_ID) que es una clave primaria auto incrementada
.- mesa Los datos contiene toda la información de contacto como número de teléfono, correo electrónico de identificación, dirección, etc.
- Los contactos primas apunta al contacto real creado. Por lo tanto, usamos los contactos brutos mientras agregamos un contacto .
- El usuario no puede agregar ningún dato en la tabla de contactos. Los datos en esta tabla
se llenan internamente debido a la agregación de contactos
.La razón lógica trabajó durante algún de los contactos es: _ID para los contactos, contactos primas sigue siendo igual hasta que es cualquier agregación de contacto teniendo lugar . Digamos que agrega dos contactos con el mismo nombre abc. Aquí _ID para incrementos contactos primas dos veces mientras _ID para incrementos de contactos sólo una vez, ya que estos dos contactos consigue fusionaron debido a la agregación de contactos
La última edición aprobada fue incorrecta. Si lees el original, verás la puntuación faltante y el énfasis en las 3 tablas. Luego hace una referencia a eso ya que "La tabla de datos, 'contactos' contiene todos los ..." Ha modificado las declaraciones correctas del autor original. – mobibob