2011-04-18 23 views
5

Tengo una aplicación que tiene varias cuentas y SyncAdapter. Deseo dejar de sincronizar una cuenta tan pronto como el usuario elija una diferente. Estoy haciendo:Detener la sincronización de Android SyncAdapter

ContentResolver.cancelSync(new Account(mAccount, ACCOUNT_TYPE), MyProvider.AUTHORITY); 
ContentResolver.removePeriodicSync(new Account(mAccount, ACCOUNT_TYPE), MyProvider.AUTHORITY, new Bundle()); 

Y todavía se sincroniza. ¿Cómo puedo evitar que se sincronice?

ps habilité la sincronización a través de setSyncAutomáticamente, requestSync inicialmente.

+1

Solo para aclarar, la razón por la que su solución original no funcionó es porque usó 'setSyncAutomatically'. Sin embargo, si hubiera habilitado la sincronización mediante el uso de 'addPeriodicSync (Cuenta de cuenta, String authority, Bundle extras, long pollFrequency)', entonces su solución original hubiera funcionado. – JosephL

Respuesta

8

Me di cuenta.

Hemos de usar:

int syncOnOff = 0; 

ContentResolver.setIsSyncable(account, MyProvider.AUTHORITY, syncOnOff); 

donde syncOnOff es 0 para desactivar,> 0 para activar. | o | ¿Por qué no es falso?

+3

Esto no detiene explícitamente el proceso de sincronización en ejecución, solo dice que no habrá más sincronización una vez que finalice la sincronización actual en ejecución – Nickolaus

+1

¡Me salvaste el día! @Nickolaus: luego lo combina con 'ContentResolver.cancelSync (nueva cuenta (mAccount, ACCOUNT_TYPE), MyProvider.AUTHORITY);' – Roel

7

la respuesta correcta debería ser:

uso cancelSync para cancelar una sincronización.

explicación acuerdo con this website:

tenemos la opción de cancelar una solicitud de sincronización, llamando cancelSync(). Si el adaptador de sincronización está en estado "Pendiente", lo que significa que aún no se ha iniciado , se cancelará inmediatamente y se convertirá en "Inactivo". Si se está ejecutando , se llamará al método onSyncCanceled() en el adaptador de sincronización . Puede usarlo, por ejemplo, para establecer un indicador "isSyncStopped" que onPerformSync() comprobará regularmente y responderá.

Cuestiones relacionadas