Gmail için Android içerik sağlayıcı

Android Gmail uygulamasında, üçüncü taraf geliştiricilerin ad ve okunmamış sayısı gibi etiket bilgilerini almak ve bu bilgiler değiştikçe güncel bilgileri almak için kullanabileceği bir içerik sağlayıcı bulunur. Örneğin, bir uygulama veya widget, belirli bir hesabın gelen kutusundaki okunmamış öğe sayısını 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

Uygulama, etiket bilgilerini sorgulamak için öncelikle geçerli bir Gmail hesabının e-posta adresini bulmalıdır. 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ı sorgula

Seçilen e-posta adresi ile sorgu yapmak için bir ContentProvider URI'sı edinebilirsiniz. URI'yı 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, bir 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 tutabilirsiniz.

Önceden tanımlanmış etiketler için NAME değeri yerel ayara göre değişiklik gösterebilir. Bu nedenle 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 başlıklı makaleyi inceleyin.

Bir örneği inceleyin

Bu içerik sağlayıcının bir örneğini görmek için örnek bir uygulama indirin.