L'application Gmail pour Android inclut un fournisseur de contenu que les développeurs tiers peuvent utiliser pour récupérer des informations sur les libellés, telles que le nom et le nombre de messages non lus, et rester informés de ces modifications. Par exemple, une application ou un widget peut afficher le nombre de messages non lus dans la boîte de réception d'un compte spécifique.
Avant d'utiliser ce fournisseur de contenu, appelez la
GmailContract.canReadLabels(Context)
méthode pour déterminer si la version de l'application Gmail de l'utilisateur
est compatible avec ces requêtes.
Rechercher un compte Gmail valide à interroger
Une application doit d'abord trouver l'adresse e-mail d'un compte Gmail valide pour interroger les informations sur les libellés. Avec l'
GET_ACCOUNTS
autorisation, le
AccountManager
peut renvoyer ces informations :
// 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 */);
Interroger le fournisseur de contenu
Une fois l'adresse e-mail sélectionnée, vous pouvez obtenir un
ContentProvider
URI à interroger. Nous avons fourni une classe appelée
GmailContract
pour construire l'URI et définir les colonnes renvoyées. Une application peut interroger cet URI directement.
Avec les données dans le Cursor, vous pouvez conserver la valeur de l'URI dans la colonne
GmailContract.Labels.URI
pour interroger et surveiller les modifications sur un seul libellé.
La valeur NAME des libellés prédéfinis peut varier selon les paramètres régionaux. N'utilisez donc pas
GmailContract.Labels.NAME.
Vous pouvez plutôt identifier par programmation les libellés prédéfinis tels que "Boîte de réception",
"Envoyés" ou "Brouillons" à l'aide de la valeur de chaîne dans la
GmailContract.Labels.CANONICAL_NAME
colonne :
// Query for all labels and find the Inbox.
try (Cursor labelsCursor = getContentResolver().query(
GmailContract.Labels.getLabelsUri(selectedAccount), null, null, null, null)) {
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.
}
}
}
}
Pour en savoir plus, consultez Principes de base des fournisseurs de contenu.
Examiner un exemple
Pour voir un exemple de ce fournisseur de contenu en action, téléchargez un exemple d'application.