2011-02-28 21 views

risposta

4

Penso che ciò che si vuole è la seguente:

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

Penso che si sta cercando

ContentResolver.setMasterSyncAutomatically(<boolean>); 

Cosa docs dice:

Imposta la sincronizzazione automatica maestro vale per tutti i provider e account. Se questo è falso, l'impostazione di sincronizzazione automatica per-provider viene ignorata.

Questo metodo richiede che il chiamante abbia il permesso WRITE_SYNC_SETTINGS.

Quindi non dimenticare di aggiungere il permesso in manifest.xml:

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

Questo dovrebbe disattivare/attivare tutte le sincronizzazioni.


@Sajmon: ho aggiornato questa risposta molto utile (sto usando questo nel mio progetto personale).

+1

+1 ho modificato e aggiornato la tua risposta. Ora penso che la cosa sia più chiara. – Sajmon

+0

E 'possibile farlo da ADB ?? –

0

Ben è corretto.

è necessario utilizzare

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

si dovrà anche aggiungere dei permessi "WRITE_SYNC_SETTINGS"

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

C'è un modo per impedire all'utente di disabilitare la schermata delle impostazioni di sincronizzazione, in modo che la sincronizzazione funzioni sempre – KJEjava48

3

Codice in Sync Conti di programmazione:

sincronizzazione una volta:

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 sul intervallo di tempo automaticamente:

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); 
} 

Se si vuole sincronizzazione conti volta, chiamano primo metodo e se si desidera sincronizzazione su po 'di tempo di intervallo devi chiamare il secondo metodo e passare secondi (come 10 secondi) come argomenti in esso.

Fatto

Problemi correlati