La app de Gmail para Android incluye un proveedor de contenido que los desarrolladores externos pueden usar para recuperar información de etiquetas, como el nombre y el recuento de mensajes no leídos, y mantenerse actualizados a medida que cambia la información. Por ejemplo, una app o un widget pueden mostrar el recuento de mensajes no leídos de la carpeta Recibidos de una cuenta específica.
Antes de usar este proveedor de contenido, llama al método GmailContract.canReadLabels(Context)
para determinar si la versión del usuario de la app de Gmail admite estas consultas.
Encuentra una cuenta de Gmail válida para realizar la consulta
Una aplicación primero debe encontrar la dirección de correo electrónico de una cuenta de Gmail válida para consultar la información de la etiqueta. Con el permiso GET_ACCOUNTS
, AccountManager
puede mostrar esta información:
// Get the account list, and pick the first one
final String ACCOUNT_TYPE_GOOGLE = "com.google";
final String[] FEATURES_MAIL = {
"service_mail"
};
AccountManager.get(this).getAccountsByTypeAndFeatures(ACCOUNT_TYPE_GOOGLE, FEATURES_MAIL,
new AccountManagerCallback() {
@Override
public void run(AccountManagerFuture future) {
Account[] accounts = null;
try {
accounts = future.getResult();
if (accounts != null && accounts.length > 0) {
String selectedAccount = accounts[0].name;
queryLabels(selectedAccount);
}
} catch (OperationCanceledException oce) {
// TODO: handle exception
} catch (IOException ioe) {
// TODO: handle exception
} catch (AuthenticatorException ae) {
// TODO: handle exception
}
}
}, null /* handler */);
Consulta al proveedor de contenido
Con una dirección de correo electrónico seleccionada, puedes obtener un URI de ContentProvider
para realizar una consulta. Proporcionamos una clase simple llamada GmailContract.java
para construir el URI y definir las columnas que se muestran.
Una app puede consultar este URI directamente (o, mejor aún, usar un CursorLoader
) a fin de obtener un Cursor con información para todas las etiquetas de una cuenta:
Cursor labelsCursor = getContentResolver().query(GmailContract.Labels.getLabelsUri(selectedAccount), null, null, null, null);
Con los datos en este cursor, puedes conservar el valor del URI en la columna GmailContract.Labels.URI
para consultar y observar cambios en una sola etiqueta.
El valor NAME
para las etiquetas predefinidas puede variar según la configuración regional, así que no uses GmailContract.Labels.NAME
. En su lugar, puedes identificar de manera programática las etiquetas predefinidas, como Recibidos, Enviados o Borradores, mediante el valor de String en la columna GmailContract.Labels.CANONICAL_NAME
:
// loop through the cursor and find the Inbox
if (labelsCursor != null) {
final String inboxCanonicalName = GmailContract.Labels.LabelCanonicalName.CANONICAL_NAME_INBOX;
final int canonicalNameIndex = labelsCursor.getColumnIndexOrThrow(GmailContract.Labels.CANONICAL_NAME);
while (labelsCursor.moveToNext()) {
if (inboxCanonicalName.equals(labelsCursor.getString(canonicalNameIndex))) {
// this row corresponds to the Inbox
}
}
}
Para obtener más ayuda, consulta los Conceptos básicos sobre el proveedor de contenido.
Revisar un ejemplo
Para ver un ejemplo de este proveedor de contenido en acción, descarga una app de muestra.