Aplikasi Android Gmail 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 dari 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 membuat kueri
Aplikasi harus terlebih dahulu menemukan alamat email dari 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 */);
Membuat kueri penyedia konten
Dengan alamat email yang dipilih, Anda bisa mendapatkan URI
ContentProvider
untuk dikueri. Kami telah menyediakan class sederhana yang disebut
GmailContract.java
untuk membuat URI dan menentukan kolom yang ditampilkan.
Aplikasi dapat mengkueri URI ini secara langsung — atau lebih baik lagi, menggunakan
CursorLoader
— untuk mendapatkan Cursor dengan informasi untuk semua label pada akun:
Cursor labelsCursor = getContentResolver().query(GmailContract.Labels.getLabelsUri(selectedAccount), null, null, null, null);
Dengan data di kursor ini, Anda dapat mempertahankan nilai URI di
kolom GmailContract.Labels.URI
untuk membuat kueri dan mengamati 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 mengidentifikasi label yang telah ditetapkan secara terprogram 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.