10

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

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

谢谢!


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

4

3 回答 3

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

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

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

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

于 2013-11-20T14:31:29.987 回答
11

您可以在下面的代码和本文档的帮助下检查是否启用了同步

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

您还可以借助此功能以编程方式设置启用/ContentResolver.setSyncAutomatically禁用ContentResolver.setMasterSyncAutomatically

更新

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

于 2012-06-28T21:26:55.807 回答
3
boolean isEnabled = ContentResolver.getSyncAutomatically(account, MyProvider);
if(isEnabled)
{
...do something
}

为我工作

于 2015-07-06T10:38:55.517 回答