我需要多个SyncAdapter
。现在,我正好有七个要在App和Server之间同步不同的数据。
要启动我的适配器,请执行以下操作:
public class SyncUtils {
public static final String ACCOUNT_NAME = "My Account";
public static final String ACCOUNT_TYPE = "de.my.package";
public static final long SECONDS_PER_MINUTE = 60L;
public static final long SYNC_INTERVAL_IN_MINUTES = 2L;
public static final long SYNC_INTERVAL = SYNC_INTERVAL_IN_MINUTES * SECONDS_PER_MINUTE;
private static boolean newAccount = false;
public static void createSyncAccount(Context context, String email) {
boolean setupComplete = PreferencesSync.getSetupComplete(context, email);
AccountManager accountManager = (AccountManager) context.getSystemService(Context.ACCOUNT_SERVICE);
setUpSyncOne(accountManager);
setUpSyncTwo(accountManager);
setUpSyncThree(accountManager);
setUpSyncFour(accountManager);
setUpSyncFive(accountManager);
setUpSyncSix(accountManager);
setUpSyncSeven(accountManager);
if (newAccount || !setupComplete) {
syncRefreshImmediatly(ContentProviderOne.AUTHORITY);
syncRefreshImmediatly(ContentProviderTwo.AUTHORITY);
syncRefreshImmediatly(ContentProviderThree.AUTHORITY);
syncRefreshImmediatly(ContentProviderFour.AUTHORITY);
syncRefreshImmediatly(ContentProviderFive.AUTHORITY);
syncRefreshImmediatly(ContentProviderSix.AUTHORITY);
syncRefreshImmediatly(ContentProviderSeven.AUTHORITY);
PreferencesSync.setSetupComplete(context, email, true);
}
}
private static void setUpSyncOne(AccountManager accountManager) {
Account account = getAccount();
if (accountManager.addAccountExplicitly(account, null, null)) {
ContentResolver.addPeriodicSync(account, ContentProviderOne.AUTHORITY, new Bundle(), SYNC_INTERVAL);
newAccount = true;
}
}
private static void setUpSyncTwo(AccountManager accountManager) {
Account account = getAccount();
if (accountManager.addAccountExplicitly(account, null, null)) {
ContentResolver.addPeriodicSync(account, ContentProviderTwo.AUTHORITY, new Bundle(), SYNC_INTERVAL);
newAccount = true;
}
}
private static void setUpSyncThree(AccountManager accountManager) {
Account account = getAccount();
if (accountManager.addAccountExplicitly(account, null, null)) {
ContentResolver.addPeriodicSync(account, ContentProviderThree.AUTHORITY, new Bundle(), SYNC_INTERVAL);
newAccount = true;
}
}
private static void setUpSyncFour(AccountManager accountManager) {
Account account = getAccount();
if (accountManager.addAccountExplicitly(account, null, null)) {
ContentResolver.addPeriodicSync(account, ContentProviderFour.AUTHORITY, new Bundle(), SYNC_INTERVAL);
newAccount = true;
}
}
private static void setUpSyncFive(AccountManager accountManager) {
Account account = getAccount();
if (accountManager.addAccountExplicitly(account, null, null)) {
ContentResolver.addPeriodicSync(account, ContentProviderFive.AUTHORITY, new Bundle(), SYNC_INTERVAL);
newAccount = true;
}
}
private static void setUpSyncSix(AccountManager accountManager) {
Account account = getAccount();
if (accountManager.addAccountExplicitly(account, null, null)) {
ContentResolver.addPeriodicSync(account, ContentProviderSix.AUTHORITY, new Bundle(), SYNC_INTERVAL);
newAccount = true;
}
}
private static void setUpSyncSeven(AccountManager accountManager) {
Account account = getAccount();
if (accountManager.addAccountExplicitly(account, null, null)) {
ContentResolver.addPeriodicSync(account, ContentProviderSeven.AUTHORITY, new Bundle(), SYNC_INTERVAL);
newAccount = true;
}
}
public static void syncRefresh(String contentAuthority, Bundle bundle) {
ContentResolver.requestSync(getAccount(), contentAuthority, bundle);
}
public static void syncRefreshImmediatly(String contentAuthority) {
Bundle bundle = new Bundle();
bundle.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
bundle.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true);
syncRefresh(contentAuthority, bundle);
}
public static void syncRefreshGCM(String contentAuthority, String gcm, long addition) {
Bundle bundle = new Bundle();
bundle.putString(Globals.KEY_GCM, gcm);
bundle.putLong(Globals.KEY_ADDITION, addition);
bundle.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
bundle.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true);
syncRefresh(contentAuthority, bundle);
}
public static Account getAccount() {
return new Account(ACCOUNT_NAME, ACCOUNT_TYPE);
}
}
当我现在安装我的应用程序时,我的android设备的帐户管理器向我显示了我的应用程序帐户以及所有七个syncadapters。我现在的问题是,显示的名称都是相同的:
My App
My App
Touch to start synchronization
Synchronization: Disabled
My App
Touch to start synchronization
Synchronization: Disabled
My App
Touch to start synchronization
Synchronization: Disabled
My App
Touch to start synchronization
Synchronization: Disabled
My App
Touch to start synchronization
Synchronization: Disabled
My App
Touch to start synchronization
Synchronization: Disabled
My App
Touch to start synchronization
Synchronization: Disabled
但我实际上希望它是:
My App
SycAdapter One
Touch to start synchronization
Synchronization: Disabled
SycAdapter Two
Touch to start synchronization
Synchronization: Disabled
SycAdapter Thre
Touch to start synchronization
Synchronization: Disabled
SycAdapter Four
Touch to start synchronization
Synchronization: Disabled
SycAdapter Five
Touch to start synchronization
Synchronization: Disabled
SycAdapter Six
Touch to start synchronization
Synchronization: Disabled
SycAdapter Seven
Touch to start synchronization
Synchronization: Disabled
我怎样才能做到这一点?
编辑
帐户管理器中显示的SyncAdapter都是正确的!这意味着当我单击带有标签
My App
的第一个条目时,我的SyncAdapter One
gest开始。标签为My App
的第二个条目以我的SyncAdapter Two
开头,依此类推。因此,适配器都在正确的位置,只是具有相同的标签。那么,如何更改标签? 最佳答案
对于每个SyncAdapter,您需要一个AuthenticatorService,带有authenticator.xml和不同的帐户名称和类型。
关于android - Android帐户管理器中具有不同名称的多个SyncAdapter,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36045710/