Penyedia konten Android untuk Gmail

Aplikasi Gmail Android menyertakan penyedia konten yang dapat digunakan pengembang pihak ketiga untuk mendapatkan informasi label seperti nama dan jumlah yang belum dibaca, dan tetap diperbarui saat informasi tersebut berubah. Misalnya, sebuah 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 terhadap kueri.

Menemukan akun Gmail yang valid untuk dikueri

Aplikasi harus terlebih dahulu menemukan alamat email akun Gmail yang valid yang akan dikueri informasi label. Dengan GET_ACCOUNTS izin akses, 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 */);

Membuat kueri penyedia konten

Setelah memilih alamat email, Anda dapat memperoleh ContentProvider URI yang akan digunakan untuk kueri. Kami telah menyediakan kelas sederhana yang disebut GmailContract.java untuk menyusun URI dan mendefinisikan kolom yang ditampilkan.

Aplikasi dapat melakukan kueri URI ini secara langsung — atau lebih baik lagi, gunakan CursorLoader — untuk mendapatkan Kursor beserta informasi untuk semua label pada akun:

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

Dengan data dalam kursor ini, Anda kemudian bisa mempertahankan nilai URI di GmailContract.Labels.URI untuk mengkueri dan memantau perubahan pada label tunggal.

Nilai NAME untuk label yang telah ditentukan dapat bervariasi menurut lokal, jadi gunakan GmailContract.Labels.NAME. Sebagai gantinya, Anda dapat melakukan identifikasi label yang telah ditentukan sebelumnya 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 bantuan selengkapnya, baca Dasar-dasar penyedia konten

Tinjau contoh

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