L'app Gmail per Android include un fornitore di contenuti che gli sviluppatori di terze parti possono utilizzare per recuperare le informazioni sulle etichette, quali nome e numero di messaggi non letti e restare aggiornato man mano che le informazioni cambiano. Ad esempio, un'app o il widget potrebbe visualizzare il conteggio dei messaggi non letti della casella di posta in arrivo di un account specifico.
Prima di utilizzare questo fornitore di contenuti, chiama il
GmailContract.canReadLabels(Context)
per determinare se la versione dell'app Gmail dell'utente supporta questi
query.
Trova un account Gmail valido su cui eseguire query
Un'app deve prima trovare l'indirizzo email di un account Gmail valido su cui eseguire una query
le informazioni sull'etichetta. Con
GET_ACCOUNTS
l'autorizzazione,
AccountManager
può restituire queste informazioni:
// 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 */);
Invia una query al fornitore di contenuti
Selezionando un indirizzo email, potrai ottenere
ContentProvider
URI su cui eseguire la query. Abbiamo fornito un semplice corso chiamato
GmailContract.java
per creare l'URI e definire le colonne restituite.
Un'app può eseguire query direttamente su questo URI o, meglio ancora, utilizzare un
CursorLoader
- per ottenere un cursore con informazioni su tutte le etichette di un account:
Cursor labelsCursor = getContentResolver().query(GmailContract.Labels.getLabelsUri(selectedAccount), null, null, null, null);
Con i dati in questo cursore, puoi quindi mantenere il valore URI nella
GmailContract.Labels.URI
colonna per eseguire query e verificare le modifiche in un
con una singola etichetta.
Il valore NAME
per le etichette predefinite può variare in base alle impostazioni internazionali, quindi non
utilizza GmailContract.Labels.NAME
. Puoi invece scegliere in modo programmatico
identificare le etichette predefinite come Posta in arrivo, Inviati o Bozze utilizzando il valore String in
colonna 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
}
}
}
Per ulteriore assistenza, consulta Nozioni di base sul fornitore di contenuti
Esamina un esempio
Per vedere un esempio di questo fornitore di contenuti in azione, scaricare un'app di esempio.