2012-06-30 19 views
5

En mis AccountAuthenticatorActivity que trato de configuración de sincronización-opciones para una cuenta después de addAccountExplicitly con las líneas siguientes:cuenta la sincronización de cada minuto

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 se establece en 86400 (cada 24 horas). Pero mi adaptador de sincronización aún se activa cada minuto. ¿Qué estoy haciendo mal? (la sincronización misma funciona sin problemas)

Respuesta

3

Resolvió yo mismo: el adaptador de sincronización se repite cuando el SyncResult.stats no coincide con el ContentResolver-Operations. A medida que coinciden, la sincronización se desencadena como se esperaba.

Actualización: otro problema fue que llamé a ContentResolver.notifyUpdate durante la operación de sincronización. eliminé eso, y estuvo bien.

+0

¿Cómo se las arregló para hacer coincidir SyncResult.stats con los contactos de SyncAdapter ContentResolver? – Nifhel

+1

No entiendo lo que quiere decir con los contactos. Solo necesitas contar apropiadamente. Por ejemplo, usted insertó una entrada que 'SyncResult.stats.numInserted ++' debería hacerlo. – oleh

+0

Gracias, tuve su mismo problema pero por una razón diferente. La causa de mi problema fue que estaba usando la autoridad equivocada, después de establecer la correcta (com.android.contacts) todo funcionó. :) – Nifhel

1

Mi SyncAdapter se estaba ejecutando cada minuto, sin respetar el intervalo pollFrequency. Solo estaba usando consultas para enviar datos locales a un servidor remoto (en el SyncAdapter). No estaba actualizando ningún dato local en el SyncAdapter.

Pero mis datos locales se actualizaban en intervalos muy cortos (recibiendo datos de un dispositivo BLE) usando otro servicio.

Para resolver este problema, tuve que cambiar todos notifyChange llamadas en mi proveedor de datos para incluir el parámetro adicional syncToNetwork: false (marque notifyChange documentación).

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

Este cambio no afectó mi CursorAdapter utilizado en la Activity para mostrar los datos tan pronto como puedo actualizar las tablas.

La asignación de los valores correctos a syncResult.stats no resolvió mi problema.

Cuestiones relacionadas