Поставщик контента 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 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
        }
    }
}

Для получения дополнительной помощи прочитайте Основы контент-провайдера.

Посмотреть пример

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