Nhà cung cấp nội dung Android cho Gmail

Ứng dụng Gmail cho Android có một trình cung cấp nội dung mà nhà phát triển bên thứ ba có thể dùng để truy xuất thông tin nhãn, chẳng hạn như tên và số lượng thư chưa đọc, đồng thời luôn cập nhật khi thông tin đó thay đổi. Ví dụ: một ứng dụng hoặc tiện ích 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 phương thức GmailContract.canReadLabels(Context) để xác định xem phiên bản ứng dụng Gmail mà người dùng đang dùng có hỗ trợ các truy vấn này hay không.

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 địa chỉ email của một tài khoản Gmail hợp lệ để truy vấn thông tin nhãn. Với quyền GET_ACCOUNTS, AccountManager có thể trả về thông tin sau:

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

Sau khi chọn một địa chỉ email, bạn có thể lấy URI ContentProvider để truy vấn. Chúng tôi đã cung cấp một lớp có tên GmailContract để 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.

Với dữ liệu trong Cursor, bạn có thể duy trì giá trị URI trong cột GmailContract.Labels.URI để truy vấn và theo dõi các thay đổi trên một nhãn duy nhất.

Giá trị NAME cho nhãn được xác định trước có thể thay đổi theo ngôn ngữ, vì vậy, đừng sử dụng GmailContract.Labels.NAME. Thay vào đó, bạn có thể xác định các nhãn được xác định trước theo phương thức lập trình, chẳng hạn như Hộp thư đến, Thư đã 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:

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

Để biết thêm thông tin, hãy xem phần Kiến thức cơ bản về trình cung cấp nội dung.

Xem xét một ví dụ

Để xem ví dụ về nhà cung cấp nội dung này đang hoạt động, hãy tải một ứng dụng mẫu xuống.