Provider di contenuti Android per Gmail

L'app Gmail per Android include un fornitore di contenuti che gli sviluppatori di terze parti possono utilizzare per recuperare informazioni sulle etichette, come il nome e il conteggio dei messaggi non letti, e rimanere aggiornati man mano che queste informazioni cambiano. Ad esempio, un'app o un widget potrebbe mostrare il conteggio dei messaggi non letti della posta in arrivo di un account specifico.

Prima di utilizzare questo fornitore di contenuti, chiama il GmailContract.canReadLabels(Context) metodo per determinare se la versione dell'app Gmail dell'utente supporta queste query.

Trovare un account Gmail valido per eseguire query

Un'app deve prima trovare l'indirizzo email di un account Gmail valido per eseguire query sulle informazioni sulle etichette. Con l' GET_ACCOUNTS 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 */);

Eseguire query sul fornitore di contenuti

Dopo aver selezionato un indirizzo email, puoi ottenere un ContentProvider URI su cui eseguire query. Abbiamo fornito una classe denominata GmailContract per creare l'URI e definire le colonne restituite. Un'app può eseguire query direttamente su questo URI.

Con i dati in Cursor, puoi conservare il valore URI nella GmailContract.Labels.URI colonna per eseguire query e monitorare le modifiche su una singola etichetta.

Il valore NAME per le etichette predefinite può variare in base alle impostazioni internazionali, quindi non utilizzare GmailContract.Labels.NAME. In alternativa, puoi identificare a livello di programmazione le etichette predefinite come Posta in arrivo, Inviati o Bozze utilizzando il valore stringa nella GmailContract.Labels.CANONICAL_NAME colonna:

// 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.
            }
        }
    }
}

Per saperne di più, consulta Nozioni di base sui fornitori di contenuti.

Esaminare un esempio

Per vedere un esempio di questo fornitore di contenuti in azione, scarica un'app di esempio.