2011-02-28 5 views

Répondre

4

Je pense que ce que vous voulez est la suivante:

ContentResolver.setSyncAutomatically(account, authority, true/false); 
22

Je pense que vous cherchez

ContentResolver.setMasterSyncAutomatically(<boolean>); 

Qu'est-ce que docs dit:

Définit le maître réglage de synchronisation automatique cela s'applique à tous les fournisseurs et les comptes. Si cela est faux, le paramètre de synchronisation automatique par fournisseur est ignoré.

Cette méthode nécessite que l'appelant conserve l'autorisation WRITE_SYNC_SETTINGS.

Donc, ne pas oublier d'ajouter la permission dans manifest.xml:

<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" /> 

Cela devrait désactiver/activer toutes les synchronisations.


@Sajmon: J'ai mis à jour ce que je pense que la réponse très utile (je l'utilise dans mon projet personnel).

+1

+1 J'ai édité et mis à jour votre réponse. Maintenant, je pense que cette chose est plus claire. – Sajmon

+0

Est-il possible de le faire à partir de ADB ?? –

0

Ben a raison.

Vous devez utiliser

ContentResolver.setSyncAutomatically(account, authority, true/false); 

vous aurez également besoin d'ajouter la permission "WRITE_SYNC_SETTINGS"

<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS"/> 
+0

Yat-il un moyen d'empêcher l'utilisateur de désactiver la synchronisation à travers l'écran de paramètres, Alors que la synchronisation sera toujours effectuer – KJEjava48

3

Code pour comptes Sync Programmatically:

Sync une fois:

public static void syncAllAccounts(Context contextAct) throws Exception { 
    AccountManager manager = AccountManager.get(contextAct); 
    Account[] accounts = manager.getAccountsByType("com.google"); 
    String accountName = ""; 
    String accountType = ""; 
    for (Account account : accounts) { 
     accountName = account.name; 
     accountType = account.type; 
     break; 
    } 

    Account a = new Account(accountName, accountType); 
    ContentResolver.requestSync(a, "com.android.calendar", new Bundle()); 
} 

Sync sur l'intervalle de temps automatiquement:

public static void syncAllAccountsPeriodically(Context contextAct, long seconds) throws Exception { 
    AccountManager manager = AccountManager.get(contextAct); 
    Account[] accounts = manager.getAccountsByType("com.google"); 
    String accountName = ""; 
    String accountType = ""; 
    for (Account account : accounts) { 
     accountName = account.name; 
     accountType = account.type; 
     break; 
    } 

    Account a = new Account(accountName, accountType); 
    ContentResolver.addPeriodicSync(a, "com.android.calendar", new Bundle(), seconds*1000); 
} 

Si vous voulez synchronisation comptes une fois, appelez première méthode et si vous voulez synchronisation sur un certain temps intervalle vous devez appeler seconde méthode et passer secondes (comme 10 secondes) comme arguments dedans.

Fait

Questions connexes