Dostawca treści dla Gmaila na Androida

Aplikacja Gmail na Androida ma dostawcę treści, z którego programiści zewnętrzni mogą pobierać informacje o etykietach, takie jak nazwa i liczba nieprzeczytanych wiadomości, oraz być na bieżąco w miarę zmian. Na przykład aplikacja lub widżet może wyświetlać liczbę nieprzeczytanych elementów w skrzynce odbiorczej na konkretnym koncie.

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

Znajdź ważne konto Gmail, na które chcesz wysłać zapytanie

Aplikacja musi najpierw znaleźć adres e-mail prawidłowego konta Gmail, aby uzyskać informacje o etykietach. Z uprawnieniami GET_ACCOUNTS narzędzie AccountManager może zwrócić 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 */);

Wyślij zapytanie do dostawcy treści

Po wybraniu adresu e-mail możesz uzyskać identyfikator URI ContentProvider, którego będziesz używać do wysyłania zapytań. Udostępniliśmy prostą klasę o nazwie GmailContract.java do tworzenia identyfikatora URI i definiowania zwracanych kolumn.

Aplikacja może bezpośrednio wysyłać zapytania dotyczące tego identyfikatora URI, a jeszcze lepiej użyć CursorLoader, aby uzyskać kursor z informacjami o wszystkich etykietach na koncie:

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

Za pomocą tego kursora możesz następnie utrwalić wartość identyfikatora URI w kolumnie GmailContract.Labels.URI, aby wykonywać zapytania i obserwować zmiany w pojedynczej etykiecie.

Wartość NAME w przypadku wstępnie zdefiniowanych etykiet może się różnić w zależności od regionu, dlatego nie używaj GmailContract.Labels.NAME. Zamiast tego możesz automatycznie identyfikować wstępnie zdefiniowane etykiety, takie jak Odebrane, Wysłane lub Wersje robocze, korzystając z 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
        }
    }
}

Przeczytaj podstawowe informacje o dostawcach treści.

Zobacz przykład

Aby zobaczyć przykład działania tego dostawcy treści, pobierz przykładową aplikację.