La app de Gmail para Android incluye una proveedor de contenido que los desarrolladores externos pueden usar para recuperar información de etiquetas, como el nombre y recuento de mensajes no leídos y se mantienen actualizados a medida que cambia esa información. Por ejemplo, una app o widget puede mostrar el recuento de mensajes no leídos de la bandeja Recibidos de una cuenta específica.
Antes de usar este proveedor de contenido, llama al
GmailContract.canReadLabels(Context)
para determinar si la versión de la app de Gmail del usuario admite estas
para tus consultas.
Busca una cuenta de Gmail válida para realizar consultas
Una app primero debe encontrar la dirección de correo electrónico de una cuenta de Gmail válida para realizar búsquedas
la información de las etiquetas. Con la
GET_ACCOUNTS
permiso, el
AccountManager
puede devolver 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
Si seleccionas una dirección de correo electrónico, puedes obtener una
ContentProvider
Es el URI en el que se realizará la consulta. Proporcionamos una clase sencilla 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
— para 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
GmailContract.Labels.URI
para consultar y observar los cambios en una
con una sola etiqueta.
El valor NAME
de las etiquetas predefinidas puede variar según la configuración regional, así que no
usa GmailContract.Labels.NAME
. En su lugar, puedes programar
identificar etiquetas predefinidas, como Bandeja de entrada, Enviados o Borradores, con el valor de cadena 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, lee Conceptos básicos sobre los proveedores de contenido
Revisa un ejemplo
Para ver un ejemplo de este proveedor de contenido en acción, descarga una app de ejemplo.