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

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

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

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