Как я могу добавить категорию в мой SyncAdapter - PullRequest
4 голосов
/ 14 декабря 2011

Я попробовал отличный пример Google для синхронизации контактов из веб-службы, и это прекрасно работает. Это называется SampleSyncAdapter и действительно того стоит: http://developer.android.com/resources/samples/SampleSyncAdapter/index.html

У меня все получилось, но я не могу найти ни в примере, ни в документации способ добавить категорию, которая бы ссылалась на пользовательское действие, как на скриншоте ниже:

(у меня есть только опция синхронизации учетной записи с флажком)

enter image description here

Итак, мой вопрос: как я могу добавить категорию настроек учетной записи?

1 Ответ

5 голосов
/ 01 июня 2012
Ответ

herschel дает ссылку на общее решение. Вот как можно изменить источник SampleSyncAdapter для добавления пользовательских настроек (Android 2.3.4), которые выглядят как на скриншоте выше:

  1. Помните, что менеджер учетных записей работает как системный процесс, поэтому телефон будет зависать , если в вашем коде есть необработанное исключение, отсутствует запись манифеста или ошибка в вашем xml.

  2. Создать файл ресурсов account_preferences.xml.

    • Фактическое значение экрана предпочтений android:key должно быть указано как "account_settings".
    • Если вы хотите поместить свои пользовательские настройки в категорию, вам нужно закройте тег PreferenceCategory, когда определите его; если вы поместите PreferenceScreen в категорию, телефон будет зависать при нажатии на предпочтение.

    XML:

    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
        <PreferenceCategory android:title="General Settings" />
        <PreferenceScreen android:key="account_settings"
                android:title="Account Settings"
                android:summary="Sync frequency, notifications, etc.">
            <intent android:action="com.example.android.samplesync.ACCOUNT_SETUP"
                android:targetPackage="com.example.android.samplesync"
                android:targetClass="com.example.android.samplesync.AccountPreferences" />
        </PreferenceScreen>
    </PreferenceScreen>
    
  3. Добавить ссылку на account_preferences.xml в конце authenticator.xml:

    <account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
        android:accountType="com.example.android.samplesync" android:label="@string/label"
        android:icon="@drawable/icon" android:smallIcon="@drawable/icon"
    
        android:accountPreferences="@xml/account_preferences" />
    
  4. Создайте действие с предпочтениями и добавьте его в манифест. Я использовал упрощенную версию примера кода из ответа на Как мы контролируем настройку адаптера синхронизации Android? .

    а. Добавить действие в манифест :

    <activity android:label="Account Preferences" android:name=".AccountPreferences"
       android:theme="@android:style/Theme.Dialog" android:excludeFromRecents="true" />
    

    б. Вот самое тривиальное AccountPreferences.java:

    public class AccountPreferences extends PreferenceActivity {
        @Override
        public void onCreate(Bundle icicle) {
            super.onCreate(icicle);
            addPreferencesFromResource(R.xml.preferences_resources);
        }
    }
    

    с. Вот preferences_resources.xml с жестко закодированными строками:

    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
        <PreferenceCategory android:title="Privacy preferences"/>
            <CheckBoxPreference android:key="privacy_contacts" android:defaultValue="true"
                    android:summary="Keep contacts private" android:title="Contacts"/>
        <PreferenceCategory android:title="Outgoing"/>
            <CheckBoxPreference android:key="allow_mail" android:defaultValue="true"
                    android:summary="Allow email" android:title="Email"/>
    </PreferenceScreen>
    
  5. Вот и все. Установите код, откройте учетные записи и выберите свою учетную запись SampleSyncAdapter ( user1 ). Выберите Настройки учетной записи , и вы увидите настройки активности.

Пользовательские настройки синхронизации http://i49.tinypic.com/5d6ve0.jpg

...