Dostawca treści dla Gmaila na Androida

Aplikacja Gmail na Androida zawiera dostawcę treści, którego deweloperzy zewnętrzni mogą używać do pobierania informacji o etykietach, takich jak nazwa i liczba nieprzeczytanych wiadomości, oraz do aktualizowania tych informacji. Na przykład aplikacja lub widżet może wyświetlać liczbę nieprzeczytanych wiadomości w skrzynce odbiorczej konkretnego konta.

Zanim użyjesz tego dostawcy treści, wywołaj metodę GmailContract.canReadLabels(Context), aby sprawdzić, czy wersja aplikacji Gmail użytkownika obsługuje te zapytania.

Znajdź prawidłowe konto Gmail, którego zapytanie chcesz przeprowadzić

Aby zapytać o informacje o etykiecie, aplikacja musi najpierw znaleźć adres e-mail prawidłowego konta Gmail. Z uprawnieniem GET_ACCOUNTS AccountManager można uzyskać te informacje:

// 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 */);

Przesyłanie zapytania do dostawcy treści

Po wybraniu adresu e-mail możesz uzyskać adres URI ContentProvider, którego możesz użyć do wysłania zapytania. Udostępniliśmy prostą klasę o nazwie GmailContract.java, która służy do tworzenia identyfikatora URI i określania zwracanych kolumn.

Aplikacja może wysłać zapytanie o ten identyfikator URI bezpośrednio lub – co jeszcze lepsze – użyć parametru CursorLoader, aby uzyskać kursor z informacjami o wszystkich etykietach na koncie:

Cursor labelsCursor = getContentResolver().query(GmailContract.Labels.getLabelsUri(selectedAccount), null, null, null, null);

Dzięki tym danym możesz zapisać wartość URI w kolumnie GmailContract.Labels.URI, aby zapytać o zmiany w pojedynczej etykiecie i je obserwować.

Wartość NAME w przypadku zdefiniowanych wstępnie etykiet może się różnić w zależności od języka, dlatego nie używaj wartości GmailContract.Labels.NAME. Zamiast tego możesz zdefiniować z góry etykiety, takie jak Skrzynka odbiorcza, Wysłane lub Szkic, i zidentyfikować je za pomocą wartości ciągu znaków w kolumnie 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
        }
    }
}

Więcej informacji znajdziesz w artykule Podstawy dotyczące dostawców treści.

Zapoznaj się z przykładem

Aby zobaczyć, jak działa ten dostawca treści, pobierz przykładową aplikację.