Android Gmail uygulaması, üçüncü taraf geliştiricilerin ad ve okunmamış e-posta sayısı gibi etiket bilgilerini almak ve bu bilgiler değiştikçe güncel kalmak için kullanabileceği bir içerik sağlayıcı içerir. Örneğin, bir uygulama veya widget, belirli bir hesabın gelen kutusunun okunmamış ileti sayısını gösterebilir.
Bu içerik sağlayıcıyı kullanmadan önce, kullanıcının Gmail uygulamasının bu sorguları destekleyip desteklemediğini belirlemek için GmailContract.canReadLabels(Context)
yöntemini çağırın.
Sorgulanacak geçerli bir Gmail hesabı bulma
Bir uygulamanın etiket bilgilerini sorgulamak için öncelikle geçerli bir Gmail hesabının e-posta adresini bulması gerekir. GET_ACCOUNTS
iznine sahip olan AccountManager
, aşağıdaki 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ı sorgulayın
Seçilen bir e-posta adresiyle, sorgulanacak bir ContentProvider
URI'si elde edebilirsiniz. URI'yi oluşturmak ve döndürülen sütunları tanımlamak için GmailContract.java
adlı basit bir sınıf sağladık.
Bir uygulama, hesaptaki tüm etiketlerin bilgilerini içeren bir imleç 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 işaretçideki verilerle, tek bir etiketteki değişiklikleri sorgulamak ve izlemek için URI değerini GmailContract.Labels.URI
sütununda kalıcı hale getirebilirsiniz.
Ö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önderilenler 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 başlıklı makaleyi inceleyin.
Bir örneği inceleyin
Bu içerik sağlayıcının kullanıldığı bir örneği görmek için örnek uygulamayı indirin.