Home » Android » Check if Sync is Enabled within Android App

Check if Sync is Enabled within Android App

Posted by: admin May 14, 2020 Leave a comment

Questions:

Is there a way to check, programmatically within my Android app, whether a particular setting under Settings > Accounts and Sync > Data & Synchronization is enabled or not?

Is there a way to check if the general sync settings are enabled?

Thanks!


If it helps to know “why,” I’m currently rolling my own sync functionality (not using SyncAdapter). However, if possible I’d like to have my sync service listed under Data & Synchronization. Right now I’m planning to hack a dummy sync service that does nothing and have my app’s sync service query whether or not the dummy sync service is enabled. That will tell me whether to sync or not.

How to&Answers:

You can check whether sync is enable or not with the help of below code and 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
  }

You can also set enable/disable programmatically with the help of this ContentResolver.setSyncAutomatically and ContentResolver.setMasterSyncAutomatically

Update :

isSyncActive returns true if there is currently a sync operation for the given account or authority in the pending list, or actively being processed.

Answer:

To know if a sync is enabled (and not active as rajpara’s answer do), use this:

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

The “master” sync status is the global sync switch the user can use to disable all sync on his phone. If the master sync is off, your account won’t sync, even if your account sync status tells that it’s enabled.

As @HiB mentionned, the android.permission.READ_SYNC_SETTINGS permission is needed to access the sync status. android.permission.WRITE_SYNC_SETTINGS is needed to enable/disable it.

You also need android.permission.GET_ACCOUNTS to get the accounts, as MeetM mentionned.

Answer:

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

Works for me