Android как включить / отключить автоматическую синхронизацию программно - PullRequest
9 голосов
/ 28 февраля 2011

Мне нужно знать, как автоматически включать и выключать автоматическую синхронизацию.

Ответы [ 4 ]

22 голосов
/ 12 января 2012

Я думаю, что вы ищете

ContentResolver.setMasterSyncAutomatically(<boolean>);

Что говорит документация:

Устанавливает основной параметр автосинхронизации, который применяется ко всем поставщикам и учетным записям.Если это значение равно false, параметр автосинхронизации для каждого поставщика игнорируется.

Этот метод требует, чтобы вызывающая сторона держала разрешение WRITE_SYNC_SETTINGS.

Поэтому не забудьте добавить разрешение в manifest.xml:

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

Это должноотключить / включить все синхронизации.


@ Sajmon: я обновил это, я думаю, очень полезный ответ (я использую это в моем личном проекте).

5 голосов
/ 12 марта 2011

Я думаю, что вы хотите следующее:

ContentResolver.setSyncAutomatically(account, authority, true/false);
4 голосов
/ 18 июня 2015

Код для Синхронизация учетных записей Программно:

Синхронизация один раз:

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

Автоматическая синхронизация по интервалу времени:

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

Если вы хотите синхронизировать учетные записи один раз , вызовите первый метод и если вы хотите синхронизация на некоторый интервал времени Вы должны вызвать секундный метод и передать секунд (например, 10 секунд) в качестве аргументов в нем.

Готово

0 голосов
/ 18 апреля 2013

Бен верен.

Вам нужно использовать

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

вам также необходимо добавить разрешение "WRITE_SYNC_SETTINGS"

<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...