Obtener contactos por tipo MIME en Android

Quiero obtener una lista de contactos basados ​​en su tipo MIME en Android.

Por ejemplo, quiero una lista de contactos que tienen direcciones de correo electrónico.

Debe leer un contacto en bruto junto con todos los datos asociados con él mediante el directorio ContactsContract.RawContacts.Entity . Si el contacto bruto tiene filas de datos, el cursor de entidad contendrá una fila para cada fila de datos. Si el contacto bruto no tiene filas de datos, el cursor seguirá conteniendo una fila con la información de nivel de contacto sin procesar.

 Uri rawContactUri = ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId); Uri entityUri = Uri.withAppendedPath(rawContactUri, Entity.CONTENT_DIRECTORY); Cursor c = getContentResolver().query( entityUri, new String[] { RawContacts.SOURCE_ID, Entity.DATA_ID, Entity.MIMETYPE, Entity.DATA1 }, null, null, null); try { while (c.moveToNext()) { String sourceId = c.getString(0); if (!c.isNull(1)) { String mimeType = c.getString(2); String data = c.getString(3); //decide here based on mimeType, see comment later } } } finally { c.close(); } 

Por ejemplo, si el Phone.CONTENT_ITEM_TYPE es Phone.CONTENT_ITEM_TYPE , la columna DATA1 almacena el número de teléfono, pero si el tipo de datos es Email.CONTENT_ITEM_TYPE , DATA1 almacena la dirección de correo electrónico.

Para ser genérico y futuro-prueba, es posible que desee utilizar, por ejemplo, CommonDataKinds.Email , que proporcionan constantes para los tipos de contenido y los nombres de columna de los datos respectivos, por lo que podría escribir algo como

 String email = c.getString(c.getColumnIndex(Email.ADDRESS)); 

Y puede, por supuesto, proporcionar una condición a ContentResolver.query() para recuperar sólo los registros de interés, utilizando MIMETYPE y otras constantes de DataColumns .

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.