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