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

时间:2012-06-28 21:05:22

标签: android sync

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

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

谢谢!


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

3 个答案:

答案 0 :(得分:26)

要知道是否已启用同步(并且未启用rajpara's answer,请执行此操作):

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权限。

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

答案 1 :(得分:11)

您可以借助以下代码和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
  }

您还可以借助此ContentResolver.setSyncAutomaticallyContentResolver.setMasterSyncAutomatically

以编程方式设置启用/停用

更新

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

答案 2 :(得分:3)

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

为我工作