Penyedia konten Android untuk Gmail

Aplikasi Gmail Android menyertakan penyedia konten yang dapat digunakan oleh developer pihak ketiga untuk mengambil informasi label seperti nama dan jumlah yang belum dibaca, serta terus mendapatkan info terbaru saat informasi tersebut berubah. Misalnya, aplikasi atau widget dapat menampilkan jumlah 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 mengajukan kueri informasi label. Dengan izin GET_ACCOUNTS, AccountManager dapat menampilkan informasi berikut:

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

Membuat kueri penyedia konten

Dengan memilih alamat email, Anda bisa mendapatkan URI ContentProvider untuk kueri. Kami telah menyediakan class sederhana yang disebut GmailContract.java untuk membuat URI dan menentukan kolom yang ditampilkan.

Aplikasi dapat membuat kueri URI ini secara langsung — atau lebih baik lagi, menggunakan CursorLoader — untuk mendapatkan Kursor dengan informasi untuk semua label di akun:

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

Dengan data dalam kursor ini, Anda dapat mempertahankan nilai URI dalam kolom GmailContract.Labels.URI untuk mengkueri dan melihat perubahan pada satu label.

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

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

Untuk mendapatkan bantuan lebih lanjut, baca Dasar-dasar penyedia konten

Tinjau contoh

Untuk melihat contoh cara kerja penyedia konten ini, download aplikasi contoh.