Aplikasi Gmail untuk Android menyertakan penyedia konten yang dapat digunakan developer pihak ketiga untuk mengambil informasi label, seperti nama dan jumlah yang belum dibaca, serta terus mendapatkan informasi terbaru saat informasi tersebut berubah. Misalnya, aplikasi atau widget dapat menampilkan jumlah yang belum dibaca di kotak masuk akun tertentu.
Sebelum menggunakan penyedia konten ini, panggil
GmailContract.canReadLabels(Context)
metode 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 dikueri informasi labelnya. 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 */);
Mengueri penyedia konten
Setelah alamat email dipilih, Anda kemudian dapat memperoleh a
ContentProvider
URI untuk dikueri. Kami telah menyediakan class bernama
GmailContract
untuk membuat URI dan menentukan kolom yang ditampilkan. Aplikasi dapat mengueri URI ini secara langsung.
Dengan data di Cursor, Anda dapat mempertahankan nilai URI di
GmailContract.Labels.URI
kolom untuk mengueri dan memantau perubahan pada satu label.
Nilai NAME untuk label yang telah ditentukan sebelumnya 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
GmailContract.Labels.CANONICAL_NAME
kolom:
// 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.
Meninjau contoh
Untuk melihat contoh penyedia konten ini beraksi, download aplikasi contoh.