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 nombre de messages non lus et restez informé dès que cette information change. Par exemple, une application ou widget pouvait 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 prend en charge ces
requêtes.
Trouver un compte Gmail valide pour envoyer une requête
L'application doit d'abord trouver l'adresse e-mail d'un compte Gmail valide à interroger
des informations sur l'étiquette. Avec l'attribut
GET_ACCOUNTS
l'autorisation,
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
ContentProvider
URI à 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 cet URI directement ou, mieux encore, utiliser un
CursorLoader
— pour obtenir un curseur contenant les informations de toutes les étiquettes d'un compte:
Cursor labelsCursor = getContentResolver().query(GmailContract.Labels.getLabelsUri(selectedAccount), null, null, null, null);
Avec les données dans ce curseur, vous pouvez ensuite conserver la valeur de l'URI dans le
GmailContract.Labels.URI
pour interroger et surveiller les modifications
libellé unique.
La valeur NAME
des étiquettes prédéfinies peut varier en fonction des paramètres régionaux. Par conséquent, ne
utiliser GmailContract.Labels.NAME
. À la place, vous pouvez programmer
les libellés prédéfinis, tels que "Boîte de réception", "Messages envoyés" ou "Brouillons", à l'aide de la valeur "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
Consulter un exemple
Pour voir un exemple de ce fournisseur de contenu en action, télécharger une application exemple.