Tôi có một ứng dụng mà tôi hy vọng sẽ gửi chi tiết trong danh sách liên hệ Android tới máy chủ từ xa để người dùng có thể xem danh bạ của mình trực tuyến. Để thực hiện việc này, tôi muốn thông báo cho máy chủ từ xa về bất kỳ thay đổi nào được thực hiện trên điện thoại vào danh sách liên lạc.Phương thức Observer onChange được gọi là hai lần sau 1 thay đổi trong con trỏ
Tôi đã thiết lập một ContentObserver trên 'ContactsContract.Contacts.CONTENT_URI' từ một dịch vụ được bắt đầu khi điện thoại được khởi động.
Tôi có một số thời gian, 2 người đầu tiên là ngẫu nhiên, thứ ba là mối quan tâm chính của tôi.
1: Khi tôi đã thiết lập dịch vụ đăng ký ContentObserver trên Con trỏ của tôi, người quan sát đó chỉ tồn tại trong dịch vụ? Ý tôi là, nếu dịch vụ bị giết, thì contentObserver có tiếp tục quan sát không?
2: Tôi nghi ngờ câu trả lời là không, nhưng tôi vẫn sẽ hỏi. Có anyway biết được liên lạc đang được cập nhật là kích hoạt phương thức onchange của contentObserver của tôi? hiện tại tôi phải biên dịch danh sách tất cả địa chỉ liên hệ trên điện thoại và gửi chúng đến máy chủ từ xa của tôi, sẽ dễ dàng hơn rất nhiều khi chỉ gửi chi tiết danh bạ đang được cập nhật.
3: Đây là câu hỏi chính của tôi, khi tôi thực hiện thay đổi đối với Danh sách liên hệ, phương thức onChange đang được kích hoạt hai lần liên tiếp. 1 thay đổi, 2 cuộc gọi. Có anyway quản lý này?
public class ContactService extends Service {
JSONArray contactList;
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
Log.i("C2DM","content observers initialised");
super.onCreate();
//Call Log Content Provider observer
MyContentContactsObserver contactsObserver = new MyContentContactsObserver();
ContactService.this.getContentResolver().registerContentObserver (ContactsContract.Contacts.CONTENT_URI, true, contactsObserver);
}
private class MyContentContactsObserver extends ContentObserver {
public MyContentContactsObserver() {
super(null);
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Log.i("LOG","detected change in contacts: "+selfChange);
}
}
}
kết quả trong 2 dòng nhanh chóng trong logcat của tôi:
detected change in contacts: false
detected change in contacts: false
+1, 10000ms giây có hoạt động trong mọi trường hợp mà không thành công hay không, bạn có thực hiện bất kỳ phản hồi nào về điều này từ người dùng không, cảm ơn? –
i havent nhận được bất kỳ phản hồi nào từ người dùng về vấn đề này. Tôi sẽ không nói cách tốt nhất để thực hiện nhưng nó làm việc tốt như bây giờ.một loại bản vá mà chúng tôi phải thực hiện. –
Tôi giống như 'currentTime = System.CurrentTimeMillis()' 'if (nextCallTime
Kobor42