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

use*_*114 10 android sync

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

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

谢谢!


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

Mar*_*say 26

要知道是否启用了同步(并且没有像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();
Run Code Online (Sandbox Code Playgroud)

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

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

android.permission.GET_ACCOUNTS正如MeetM所提到的那样,您还需要获取帐户.


raj*_*ara 11

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

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

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

更新:

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

  • "isSyncActive"的文档说:"如果*当前对待处理列表中的给定帐户或权限进行同步*操作,或者正在进行处理,则返回true." ---因此,一旦给定帐户的同步操作结束,即使为该帐户启用了同步,它也将返回false. (2认同)