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

Android Gmail uygulaması, üçüncü taraf geliştiricilerin ad ve okunmamış mesaj sayısı gibi etiket bilgilerini almak ve bu bilgiler değiştikçe bilgileri güncellemek için kullanabilecekleri bir içerik sağlayıcı içerir. Örneğin, bir uygulama veya widget, belirli bir hesabın gelen kutusunun okunmamış sayısını gösterebilir.

Bu içerik sağlayıcıyı kullanmadan önce kullanıcının Gmail uygulama sürümünün bu sorguları destekleyip desteklemediğini belirlemek için GmailContract.canReadLabels(Context) yöntemini çağırın.

Sorgulanacak geçerli bir Gmail hesabı bulun

Uygulamanın, etiket bilgilerini sorgulaması için öncelikle geçerli bir Gmail hesabının e-posta adresini bulması gerekir. GET_ACCOUNTS izniyle AccountManager aşağıdaki bilgileri sağlayabilir:

// 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

Bir e-posta adresi seçtiğinizde, sorgulama için bir ContentProvider URI edinebilirsiniz. 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, bu URI'yı doğrudan sorgulayabilir (veya daha iyisi, bir CursorLoader kullanabilir), bir hesaptaki tüm etiketlerle ilgili bilgileri içeren bir İmleç elde etmek için:

Cursor labelsCursor = getContentResolver().query(GmailContract.Labels.getLabelsUri(selectedAccount), null, null, null, null);

Bu imleçteki verilerle, tek bir etikette değişiklik yapmak ve değişiklikleri izlemek için GmailContract.Labels.URI sütunundaki URI değerini koruyabilirsiniz.

Önceden tanımlanmış etiketler için NAME değeri yerel ayara göre değişiklik gösterebilir. Bu yüzden 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ıyla ilgili temel bilgiler bölümünü okuyun

Bir örneği inceleyin

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