8

Tôi đang xây dựng một Ứng dụng dựa chủ yếu vào địa chỉ liên hệ của người dùng.Android: Lắng nghe các thay đổi liên hệ như WhatsApp làm

Tôi đã tạo một Account và tạo RawContacts thay mặt cho tài khoản này khi cần.
Và tôi sử dụng SyncAdapter và mọi thứ đều tuyệt vời.

Nhưng tôi vẫn đang thiếu một số bộ phận của câu đố này:

Tôi đang cố gắng để thực hiện một hành vi tương tự như WhatsApp. Như vậy-

Khi thay đổi xảy ra trong tên hoặc điện thoại của bất kỳ liên hệ nào - nó sẽ được gửi đến máy chủ để đánh giá.

Địa chỉ liên hệ này đã có trong "của tôi" RawContacts, cho dù người đó mới được tạo bởi người dùng.

Tôi biết có ContentObserver nhưng theo dõi ContactsContract.Contacts.CONTENT_URI có vẻ như là điều sai trái vì nó không cung cấp thay đổi cụ thể, cộng với nó được nâng lên nhiều lần và từ nhiều sự kiện mà tôi không quan tâm.

Tôi biết rằng WhatsApp đang sử dụng SyncAdapter nhưng tôi nghĩ rằng họ có thể đang làm điều gì đó khác.

Bất kỳ ý tưởng nào cũng sẽ được đánh giá cao.

+0

@Hagai ... xin chào bất kỳ cập nhật nào về cách bạn giải quyết vấn đề này? Tôi đã sử dụng CONTACT_LAST_UPDATED_TIMESTAMP trong mã của mình để nhận các địa chỉ liên hệ được cập nhật mới nhất nhưng con dấu này không thay đổi nếu bạn cập nhật bất kỳ trường nào trong một liên hệ chỉ có id email. –

Trả lời

0

ContentObserver theo dõi ContactsContract.Contacts.CONTENT_URI thực sự là cách để thực hiện.

Khi bạn nhận được onChange() bạn truy vấn bảng raw_contacts với điều kiện sau đây:

String where = "(rawcontacts.dirty = true or rawcontacts.deleted = 1) and rawcontacts.account_type = <your_custom_type>" 

Kết quả sẽ cung cấp cho bạn địa chỉ liên lạc thêm, cập nhật hoặc xóa.

Nếu bạn muốn biết thêm chi tiết - lý do tại sao bạn cần đăng ký ContactsContract.Contacts.CONTENT_URI là nhà cung cấp liên hệ hiện không thông báo địa chỉ liên hệ nào đã được sửa đổi trong onChange(). Điều này là do các giao dịch applyBatch() nơi nhiều liên hệ có thể thay đổi. Có thể trong tương lai sẽ có một cách để đăng ký một tập hợp con - nhưng hiện tại không có.

Các vấn đề liên quan