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, comme leur nom et le nombre de messages non lus, et rester informés de l'évolution de ces informations. Par exemple, une application ou un widget peuvent 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 méthode GmailContract.canReadLabels(Context)
pour déterminer si la version de l'application Gmail de l'utilisateur est compatible avec ces requêtes.
Trouver un compte Gmail valide pour effectuer une requête
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'autorisation GET_ACCOUNTS
, AccountManager
peut renvoyer les informations suivantes :
// 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 URI ContentProvider
à interroger. Nous avons fourni une classe simple appelée GmailContract.java
pour construire l'URI et définir les colonnes renvoyées.
Une application peut interroger directement cet URI ou, mieux encore, utiliser un CursorLoader
pour obtenir un curseur contenant des informations sur tous les libellés d'un compte :
Cursor labelsCursor = getContentResolver().query(GmailContract.Labels.getLabelsUri(selectedAccount), null, null, null, null);
Avec les données de ce curseur, vous pouvez ensuite conserver la valeur URI dans la colonne GmailContract.Labels.URI
pour interroger et surveiller les modifications apportées à 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 colonne 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
}
}
}
Pour obtenir de l'aide, 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 une application exemple.