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

Android için Gmail uygulamasında, üçüncü taraf geliştiricilerin etiket bilgilerini (ör. ad ve okunmamış ileti sayısı) almak ve bu bilgiler değiştiğinde güncel kalmak için kullanabileceği bir content provider bulunur. Örneğin, bir uygulama veya widget, belirli bir hesabın gelen kutusundaki okunmamış ileti sayısını gösterebilir.

Bu içerik sağlayıcıyı kullanmadan önce, kullanıcının Gmail uygulamasının 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ı bulma

Bir uygulamanın, etiket bilgileri için sorgu gönderebilmesi 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ıya sorgu gönderme

Bir e-posta adresi seçtikten sonra, sorgu göndermek için ContentProvider URI'si alabilirsiniz. URI'yi oluşturmak ve döndürülen sütunları tanımlamak için GmailContract adlı bir sınıf sağladık. Bir uygulama bu URI'yi doğrudan sorgulayabilir.

Cursor içindeki 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ış etiketlerin NAME değeri yerel ayara göre değişebilir. Bu nedenle GmailContract.Labels.NAME kullanmayın. Bunun yerine, GmailContract.Labels.CANONICAL_NAME sütunundaki dize değerini kullanarak Gelen Kutusu, Gönderilmiş veya Taslaklar gibi önceden tanımlanmış etiketleri programatik olarak tanımlayabilirsiniz:

// Query for all labels and find the Inbox.
try (Cursor labelsCursor = getContentResolver().query(
        GmailContract.Labels.getLabelsUri(selectedAccount), null, null, null, null)) {
    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 bilgi için İçerik sağlayıcılarla ilgili temel bilgiler başlıklı makaleyi inceleyin.

Örnek inceleme

Bu içerik sağlayıcının nasıl çalıştığını görmek için örnek bir uygulama indirin.