有没有办法在我的 Android 应用程序中以编程方式检查“设置”>“帐户和同步”>“数据和同步”下的特定设置是否启用?
有没有办法检查是否启用了常规同步设置?
谢谢!
如果它有助于了解“为什么”,我目前正在推出自己的同步功能(不使用 SyncAdapter)。但是,如果可能的话,我希望在数据和同步下列出我的同步服务。现在我打算破解一个什么都不做的虚拟同步服务,并让我的应用程序的同步服务查询是否启用了虚拟同步服务。这将告诉我是否同步。
要知道是否启用了同步(并且不像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 提到的,您还需要获取帐户。
您可以在下面的代码和本文档的帮助下检查是否启用了同步
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。
boolean isEnabled = ContentResolver.getSyncAutomatically(account, MyProvider);
if(isEnabled)
{
...do something
}
为我工作