Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Check if Sync is Enabled within Android App

Tags:

android

sync

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.

like image 279
user1435114 Avatar asked Jun 28 '12 21:06

user1435114


3 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.

like image 91
rajpara Avatar answered Oct 03 '22 15:10

rajpara


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

Works for me

like image 34
Adam86 Avatar answered Oct 03 '22 15:10

Adam86


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.

like image 44
Marc Plano-Lesay Avatar answered Oct 03 '22 17:10

Marc Plano-Lesay