Android how to enable/disable auto sync programmatically

孤街醉人 提交于 2019-11-28 08:37:10
kingston

I think you are looking for

ContentResolver.setMasterSyncAutomatically(<boolean>);

What docs says:

Sets the master auto-sync setting that applies to all the providers and accounts. If this is false then the per-provider auto-sync setting is ignored.

This method requires the caller to hold the permission WRITE_SYNC_SETTINGS.

So don't forget to add permission into manifest.xml:

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

This should disable / enable all the syncs.


@Sajmon: I updated this i think very useful answer (i'm using this in my personal project).

I think what you want is the following:

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

Code for Sync Accounts Programmatically:

Sync once:

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 on time interval automatically:

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

If you want to sync accounts once, call first method and if you want to sync on some time of interval you have to call second method and pass seconds (Like 10 Seconds) as arguments in it.

Done

Akshay

Ben is correct.

You need to use

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

you will also need to add permission "WRITE_SYNC_SETTINGS"

<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS"/>
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!