Penyedia konten Android untuk Gmail

Aplikasi Gmail untuk Android menyertakan penyedia konten yang dapat digunakan developer pihak ketiga untuk mengambil informasi label, seperti nama dan jumlah pesan belum dibaca, serta terus mendapatkan info terbaru saat informasi tersebut berubah. Misalnya, aplikasi atau widget dapat menampilkan jumlah pesan belum dibaca di kotak masuk akun tertentu.

Sebelum menggunakan penyedia konten ini, panggil metode GmailContract.canReadLabels(Context) untuk menentukan apakah versi aplikasi Gmail pengguna mendukung kueri ini.

Menemukan akun Gmail yang valid untuk dikueri

Aplikasi harus terlebih dahulu menemukan alamat email akun Gmail yang valid untuk mengkueri informasi label. Dengan izin GET_ACCOUNTS, AccountManager dapat menampilkan informasi ini:

// 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 */);

Mengirim kueri ke penyedia konten

Setelah alamat email dipilih, Anda dapat memperoleh URI ContentProvider untuk membuat kueri. Kami telah menyediakan class bernama GmailContract untuk membuat URI dan menentukan kolom yang ditampilkan. Aplikasi dapat membuat kueri URI ini secara langsung.

Dengan data di Cursor, Anda dapat menyimpan nilai URI di kolom GmailContract.Labels.URI untuk membuat kueri dan memantau perubahan pada satu label.

Nilai NAME untuk label standar dapat bervariasi menurut lokalitas, jadi jangan gunakan GmailContract.Labels.NAME. Sebagai gantinya, Anda dapat mengidentifikasi label yang telah ditentukan sebelumnya seperti Kotak Masuk, Terkirim, atau Draf secara terprogram menggunakan nilai string di kolom GmailContract.Labels.CANONICAL_NAME:

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

Untuk mengetahui informasi selengkapnya, lihat Dasar-dasar penyedia konten.

Tinjau contoh

Untuk melihat contoh penyedia konten ini beroperasi, download aplikasi contoh.