Поставщик контента Android для Gmail

Приложение Gmail для Android включает в себя контент-провайдера , который сторонние разработчики могут использовать для получения информации о метках, такой как имя и количество непрочитанных сообщений, и быть в курсе изменений этой информации. Например, приложение или виджет может отображать количество непрочитанных сообщений в почтовом ящике конкретного аккаунта.

Перед использованием этого поставщика контента вызовите метод GmailContract.canReadLabels(Context) чтобы определить, поддерживает ли версия приложения Gmail пользователя эти запросы.

Найдите действующую учетную запись Gmail для запроса

Приложение должно сначала найти адрес электронной почты действительного аккаунта Gmail, чтобы запросить информацию о метке. С разрешением GET_ACCOUNTS AccountManager может вернуть следующую информацию:

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

Запросить поставщика контента

Выбрав адрес электронной почты, вы можете получить URI ContentProvider для выполнения запроса. Мы предоставили простой класс GmailContract.java для построения URI и определения возвращаемых столбцов.

Приложение может напрямую запросить этот URI — или, что еще лучше, использовать CursorLoader — чтобы получить Cursor с информацией для всех меток в учетной записи:

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

Используя данные в этом курсоре, вы можете сохранить значение URI в столбце GmailContract.Labels.URI для запроса и отслеживания изменений на одной метке.

Значение NAME для предопределенных меток может различаться в зависимости от локали, поэтому не используйте GmailContract.Labels.NAME . Вместо этого вы можете программно определить предопределенные метки, такие как «Входящие», «Отправленные» или «Черновики», используя строковое значение в столбце 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
        }
    }
}

Для получения дополнительной информации прочтите раздел «Основы работы с поставщиками контента».

Рассмотрите пример

Чтобы увидеть пример работы этого поставщика контента, загрузите пример приложения .