2012-06-30 28 views
5

Trong tôi AccountAuthenticatorActivity tôi cố gắng thiết lập đồng bộ các tùy chọn cho một tài khoản sau khi addAccountExplicitly với dòng sau:tài khoản đồng bộ mỗi phút

ContentResolver.setIsSyncable(account, authority, 1); 
ContentResolver.setSyncAutomatically(account, authority, true); 
int seconds = getResources().getInteger(R.integer.syncFrequencySeconds); 
ContentResolver.addPeriodicSync(account, authority, new Bundle(), seconds); 

syncFrequencySeconds được thiết lập để 86400 (mỗi 24 giờ). Nhưng bộ điều hợp đồng bộ hóa của tôi vẫn được kích hoạt mỗi phút. Tôi đang làm gì sai? (bản thân đồng bộ hóa hoạt động mà không có bất kỳ sự cố nào)

Trả lời

3

Tự khắc phục sự cố: bộ điều hợp đồng bộ lặp lại khi SyncResult.stats không khớp với Hoạt động của Trình giải quyết nội dung. Khi chúng khớp, đồng bộ hóa được kích hoạt như mong đợi.

Cập nhật: một vấn đề khác là, tôi đã gọi ContentResolver.notifyCập nhật trong quá trình đồng bộ hóa. loại bỏ nó, và nó đã được sử dụng tốt.

+0

Bạn đã quản lý SyncResult.stats bằng địa chỉ liên lạc của SyncAdapter như thế nào ContentResolver? – Nifhel

+1

Không hiểu ý của bạn với các liên hệ. Bạn chỉ cần đếm tính từ. Ví dụ bạn chèn một mục nhập hơn 'SyncResult.stats.numInserted ++' nên làm điều đó. – oleh

+0

Cảm ơn, tôi đã có cùng một vấn đề của bạn nhưng vì một lý do khác. Nguyên nhân của vấn đề của tôi là tôi đã sử dụng quyền hạn sai, sau khi tôi đặt đúng (com.android.contacts) mọi thứ đã hoạt động. :) – Nifhel

1

My SyncAdapter đang chạy từng phút, không tôn trọng khoảng thời gian pollFrequency. Tôi chỉ sử dụng các truy vấn để gửi dữ liệu cục bộ đến một máy chủ từ xa (trên SyncAdapter). Tôi đã không cập nhật bất kỳ dữ liệu cục bộ nào trên SyncAdapter.

Nhưng dữ liệu cục bộ của tôi đã được cập nhật trong khoảng thời gian rất ngắn (nhận dữ liệu từ thiết bị BLE) sử dụng một dịch vụ khác.

Để giải quyết vấn đề này, tôi phải thay đổi tất cả notifyChange cuộc gọi trên nhà cung cấp dữ liệu của mình để bao gồm thông số bổ sung syncToNetwork: false (kiểm tra tài liệu notifyChange).

//getContext().getContentResolver().notifyChange(uri, null); 
getContext().getContentResolver().notifyChange(uri, null, false); 

Sự thay đổi này không ảnh hưởng đến tôi CursorAdapter sử dụng trong Activity để hiển thị các dữ liệu ngay sau khi tôi cập nhật các bảng.

Gán các giá trị thích hợp cho syncResult.stats không giải quyết được sự cố của tôi.

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