2012-06-28 5 views
9

¿Hay alguna manera de verificar, programáticamente dentro de mi aplicación de Android, si una configuración particular en Configuración> Cuentas y sincronización> Datos & sincronización está habilitada o no?Compruebe si la sincronización está activada en la aplicación de Android

¿Hay alguna forma de comprobar si la configuración de sincronización general está habilitada?

Gracias!


Si es muy útil saber "por qué", actualmente estoy rodando mi propia funcionalidad de sincronización (no usar SyncAdapter). Sin embargo, si es posible, me gustaría que mi servicio de sincronización aparezca en la Sincronización de datos &. En este momento estoy planeando hackear un servicio de sincronización ficticio que no hace nada y hacer que el servicio de sincronización de mi aplicación consulte si el servicio de sincronización ficticia está habilitado o no. Eso me dirá si sincronizar o no.

Respuesta

9

Puede comprobar si la sincronización está activado o no con la ayuda de continuación de código y this Document

AccountManager am = AccountManager.get(YourActivity.this); 
Account account = am.getAccountsByType(Const.ACCOUNT_TYPE)[0]; 
    if(ContentResolver.isSyncActive(account, DataProvider.AUTHORITY){ 
    // sync is enable 
    } 

También puede establecer activar/desactivar mediante programación con la ayuda de este ContentResolver.setSyncAutomatically y ContentResolver.setMasterSyncAutomatically

actualización:

isSyncActive devuelve verdadero si actualmente hay una operación de sincronización para la cuenta o autorización dada en la lista pendiente , o se está procesando activamente.

+0

Niza. ¿Hay alguna manera en que pueda "escuchar" cuando se cambia la configuración en el menú de Datos y Sincronización? (Tal vez hay algún tipo de transmisión que puedo recibir?) – user1435114

+2

La documentación de "isSyncActive" dice: "Devuelve verdadero si * actualmente hay una operación de sincronización * para la cuenta o autorización dada en la lista pendiente, o se está procesando activamente". --- Así que, tan pronto como finalice la operación de sincronización para una cuenta determinada, devolverá falsa aunque la sincronización esté habilitada para esa cuenta. – tiguchi

+0

Gracias @ NobuGames por guiar a mi error. – rajpara

25

Para saber si una sincronización está activada (y no activo como rajpara's answer do), utilice la siguiente:

AccountManager am = AccountManager.get(YourActivity.this); 
Account account = am.getAccountsByType(YOUR_ACCOUNT_TYPE)[0]; 
boolean isYourAccountSyncEnabled = ContentResolver.getSyncAutomatically(account, DataProvider.AUTHORITY); 
boolean isMasterSyncEnabled = ContentResolver.getMasterSyncAutomatically();

El estado de sincronización "maestro" es cambiar la sincronización mundial, el usuario puede utilizar para desactivar todas sincronización en su teléfono. Si la sincronización maestra está desactivada, su cuenta no se sincronizará, incluso si el estado de sincronización de su cuenta indica que está habilitada.

Como se menciona en @HiB, se necesita el permiso android.permission.READ_SYNC_SETTINGS para acceder al estado de sincronización. android.permission.WRITE_SYNC_SETTINGS es necesario para habilitarlo/deshabilitarlo.

También necesita android.permission.GET_ACCOUNTS para obtener las cuentas, como mencionó MeetM.

+1

'android.permission.READ_SYNC_SETTINGS' and' android.permission.WRITE_SYNC_SETTINGS' needed – HiB

+0

¿Estás seguro de la palabra 'WRITE_SYNC_SETTINGS'? –

+0

para escribir el valor ... para que esté aquí no es necesario mencionar – HiB

2
boolean isEnabled = ContentResolver.getSyncAutomatically(account, MyProvider); 
if(isEnabled) 
{ 
...do something 
} 

Obras para mí

+0

esto funciona para mí – Achin

Cuestiones relacionadas