Android Gmail uygulaması, üçüncü taraf geliştiricilerin ad ve okunmamış sayısı gibi etiket bilgilerini almak için kullanabilecekleri bir içerik sağlayıcı içerir ve bu bilgiler değiştikçe gelişmelerden haberdar olur. Örneğin, bir uygulama veya widget, belirli bir hesabın gelen kutusundaki okunmamış sayıyı gösterebilir.
Bu içerik sağlayıcıyı kullanmadan önce, kullanıcının Gmail uygulaması sürümünün bu sorguları destekleyip desteklemediğini belirlemek için GmailContract.canReadLabels(Context)
yöntemini çağırın.
Sorgulamak için geçerli bir Gmail hesabı bulun
Bir uygulamanın, etiket bilgilerini sorgulamak için önce geçerli bir Gmail hesabının e-posta adresini bulması gerekir. GET_ACCOUNTS
izniyle, AccountManager
şu bilgileri döndürebilir:
// 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 */);
İçerik sağlayıcıyı sorgulama
E-posta adresini seçtikten sonra, sorgulama için ContentProvider
URI'si alabilirsiniz. URI'yı oluşturmak ve döndürülen sütunları tanımlamak için GmailContract.java
adında basit bir sınıf sağladık.
Bir uygulama, hesaptaki tüm etiketlerle ilgili bilgileri içeren bir İmleç elde etmek için bu URI'yi doğrudan sorgulayabilir (veya daha iyisi CursorLoader
kullanabilir):
Cursor labelsCursor = getContentResolver().query(GmailContract.Labels.getLabelsUri(selectedAccount), null, null, null, null);
Bu imleçteki verilerle, tek bir etiketteki değişiklikleri sorgulamak ve izlemek için GmailContract.Labels.URI
sütunundaki URI değerini kullanabilirsiniz.
Önceden tanımlanmış etiketler için NAME
değeri, yerel ayara göre değişebileceğinden GmailContract.Labels.NAME
kullanmayın. Bunun yerine, GmailContract.Labels.CANONICAL_NAME
sütunundaki Dize değerini kullanarak Gelen Kutusu, Gönderilmiş Postalar veya Taslaklar gibi önceden tanımlanmış etiketleri programatik olarak tanımlayabilirsiniz:
// 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
}
}
}
Daha fazla yardım için İçerik sağlayıcı ile ilgili temel bilgiler bölümünü okuyun
Bir örneği inceleyin
Bu içerik sağlayıcının nasıl çalıştığını görmek için örnek bir uygulama indirin.