Ứng dụng Gmail dành cho Android bao gồm nhà cung cấp nội dung mà nhà phát triển bên thứ ba có thể sử dụng để truy xuất thông tin nhãn như tên và số lượng thư chưa đọc và luôn cập nhật khi thông tin đó thay đổi. Ví dụ: một ứng dụng hoặc tiện ích con có thể hiển thị số lượng thư chưa đọc trong hộp thư đến của một tài khoản cụ thể.
Trước khi sử dụng trình cung cấp nội dung này, hãy gọi hàm
GmailContract.canReadLabels(Context)
để xác định xem phiên bản ứng dụng Gmail của người dùng có hỗ trợ
truy vấn.
Tìm một tài khoản Gmail hợp lệ để truy vấn
Trước tiên, ứng dụng phải tìm được địa chỉ email của một tài khoản Gmail hợp lệ để truy vấn
thông tin về nhãn. Với
GET_ACCOUNTS
quyền,
AccountManager
có thể trả về thông tin này:
// 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 */);
Truy vấn trình cung cấp nội dung
Khi chọn địa chỉ email, bạn có thể nhận được
ContentProvider
URI để truy vấn. Chúng tôi đã cung cấp một lớp đơn giản được gọi là
GmailContract.java
để tạo URI và xác định các cột được trả về.
Ứng dụng có thể truy vấn trực tiếp URI này – hoặc tốt hơn là sử dụng
CursorLoader
— để lấy Con trỏ có thông tin về tất cả các nhãn trên tài khoản:
Cursor labelsCursor = getContentResolver().query(GmailContract.Labels.getLabelsUri(selectedAccount), null, null, null, null);
Với dữ liệu trong con trỏ này, bạn có thể duy trì giá trị URI trong
GmailContract.Labels.URI
để truy vấn và theo dõi những thay đổi trên
.
Giá trị NAME
cho các nhãn được xác định trước có thể khác nhau tuỳ theo ngôn ngữ, vì vậy, đừng
sử dụng GmailContract.Labels.NAME
. Thay vào đó, bạn có thể lập trình
xác định các nhãn được xác định trước như Hộp thư đến, Đã gửi hoặc Thư nháp bằng cách sử dụng giá trị Chuỗi trong
cột 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
}
}
}
Để được trợ giúp thêm, hãy đọc Thông tin cơ bản về trình cung cấp nội dung
Xem ví dụ
Để xem ví dụ về cách hoạt động của trình cung cấp nội dung này, tải ứng dụng mẫu xuống.