我需要多个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/

10-09 12:37