检查Android应用中是否启用了同步

有没有办法在我的Android应用程序中以编程方式检查是否启用了设置>帐户和同步>数据和同步下的特定设置?

有没有办法检查是否启用了常规同步设置?

谢谢!


如果它有助于知道“为什么”,我正在推出自己的同步function(不使用SyncAdapter)。 但是,如果可能的话,我希望在“数据和同步”下列出我的同步服务。 现在我打算破解一个什么都不做的虚拟同步服务,让我的应用程序的同步服务查询是否启用了虚拟同步服务。 这将告诉我是否要同步。

您可以借助以下代码和本文档检查是否启用同步

AccountManager am = AccountManager.get(YourActivity.this); Account account = am.getAccountsByType(Const.ACCOUNT_TYPE)[0]; if(ContentResolver.isSyncActive(account, DataProvider.AUTHORITY){ // sync is enable } 

您还可以在此ContentResolver.setSyncAutomaticallyContentResolver.setMasterSyncAutomatically的帮助下以编程方式设置启用/禁用

更新

如果当前对挂起列表中的给定帐户或权限进行同步操作或正在进行处理,则isSyncActive将返回true。

要知道是否启用了同步(并且没有像rajpara的回答那样激活),请使用:

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

“主”同步状态是全局同步开关,用户可以使用它来禁用手机上的所有同步。 如果主同步已关闭,即使您的帐户同步状态表明已启用,您的帐户也不会同步。

正如@HiB所提到的,访问同步状态需要android.permission.READ_SYNC_SETTINGS权限。 启用/禁用它需要android.permission.WRITE_SYNC_SETTINGS

正如MeetM所提到的,你还需要android.permission.GET_ACCOUNTS来获取帐户。

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

适合我