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