2015-04-23 11 views
15

Tôi đang làm việc trên Đồng bộ hóa liên hệ trong Android và tôi đã thực hiện thành công với Đồng bộ hóa liên hệ lần đầu tiên.Nhận danh bạ được cập nhật trong Android để đồng bộ hóa liên hệ

Đây là những gì tôi đang làm. 1. Tìm nạp tất cả Địa chỉ liên hệ và Lưu từng liên hệ trong DB bằng Contact._ID 2. Tìm nạp tên và số điện thoại và lưu trong DB.

Sau đó tôi gửi dữ liệu danh bạ của mình tới máy chủ để máy chủ có thể được cập nhật.

Bây giờ vấn đề là làm thế nào tôi có thể kiểm tra xem liên hệ cụ thể của tôi có được cập nhật hay không?

Tôi đã triển khai Broadcast Receiver để ứng dụng của tôi có thể nhận được intimated về việc cập nhật/Bổ sung/Xóa liên hệ. Nhưng tôi muốn liên lạc cụ thể.

Tôi đã tìm thấy một giải pháp là Cờ bẩn. Nó cho chúng tôi biết về liên hệ có cập nhật hay không, Đây là liên kết tham chiếu: http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.html

Nhưng tôi không thể sử dụng Cờ bẩn này, Ai đó có thể giúp tôi bằng cách triển khai Cờ bẩn.

Cảm ơn bạn đã nâng cao!

+0

tại sao bạn không thể sử dụng? – pskink

+0

Bạn đã có giải pháp chưa? Tôi đang đối mặt với cùng một vấn đề trong đơn đăng ký của tôi –

Trả lời

5

Địa chỉ liên hệ phải có giá trị ContactsContract.RawContacts.VERSION.

Nếu bạn lưu phiên bản này trên máy chủ (hoặc trong cơ sở dữ liệu trong ứng dụng của mình), bạn có thể xác định xem địa chỉ liên hệ đã thay đổi kể từ lần gửi cuối cùng đến máy chủ hay không.

+2

bất kỳ nhận xét nào về vấn đề này? Tôi vẫn đang tìm giải pháp hoàn hảo. –

+1

Không, xin lỗi. Tôi phải tự mình thử, nhưng hiện tại tôi không có thời gian cho việc đó. – tknell

+3

Không phải lo lắng, Cảm ơn bạn! –

4

Bạn sẽ nhận được số lượng liên hệ được cập nhật sau một thời điểm cụ thể từ cơ sở dữ liệu liên hệ bằng cách sử dụng truy vấn bên dưới.

ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP 

, hãy thử so sánh thời gian tải lên lần cuối với máy chủ của bạn với thời gian này.

việc kiểm tra này http://developer.android.com/reference/android/provider/ContactsContract.ContactsColumns.html#CONTACT_LAST_UPDATED_TIMESTAMP

+2

Mọi bình luận thân yêu? –

+0

bạn có thể sử dụng cơ sở dữ liệu sqlite để lưu trữ địa chỉ liên hệ với một số tem thời gian và bạn có thể thực hiện một số loại so sánh và cập nhật bảng ..try theo cách này –

+1

Đã xảy ra sự cố, bất cứ khi nào bạn thực hiện bất kỳ cuộc gọi nào và không sửa đổi bất kỳ trường nào số liên lạc, android sẽ tự động cập nhật giá trị của CONTACT_LAST_UPDATED_TIMESTAMP cho thời gian gọi, đó là sai –

2

Như bạn nói rằng bạn đang lưu trữ Contacts._ID trong cơ sở dữ liệu địa phương của bạn và lấy phone number và thông tin khác liên quan đến liên lạc từ Contacts db.

Tôi khuyên bạn nên lưu trữ dữ liệu từ bảng RawContacts vào ánh xạ cục bộ của bạn và kiểm tra các mục được liên kết với số raw_contact_id trong bảng liên hệ data.

Để kiểm tra các điểm tiếp xúc sửa đổi hoặc xóa Với raw_contact_id hiện trong bản đồ bảng kiểm tra địa phương của bạn với bảng data rằng nếu trường tiếp xúc liên quan đến việc raw_contact_id'sversion được thay đổi hoặc isDeleted lĩnh vực được thay đổi (ví dụ; Liên sẽ bị xóa khỏi xúc ứng dụng)

+0

. thí dụ? –

2

Khi tôi đã sử dụng ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP, nhưng tôi đã có vấn đề để tìm ra rằng nó là mili giây, tôi đã sử dụng một cột để có được các tệp mới và nó là trong vài giây (MediaStore.MediaColumns .DATE_ADDED) nên chú ý sử dụng đúng số.

Uri uri = ContactsContract.Contacts.CONTENT_URI; 
Cursor cursorNew; 
cursorNew = contentResolver.query(uri, 
     null, 
     ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP + ">=?", 
     new String[]{lastUpdate}, 
     null  // Ordering 
); 

'LASTUPDATE' là một chuỗi với dấu thời gian của tôi

Một điều cần chú ý là cột của mối liên lạc này chỉ xuất hiện trên API 18, phiên bản mới nhất Jelly Bean, vì vậy để giải quyết vấn đề này một lần và cho tất cả Tôi chỉ thay đổi tập tin gradle của tôi.

+0

Câu trả lời mà CONTACT_LAST_UPDATED_TIMESTAMP được cập nhật trên mỗi cuộc gọi là gì? Làm thế nào bạn đã làm việc về điều này? – Gaket

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