Android 如何将类别添加到SyncAdapter

Android 如何将类别添加到SyncAdapter,android,settings,android-syncadapter,Android,Settings,Android Syncadapter,我曾经尝试过谷歌的一个很好的例子,从一个Web服务同步联系人,效果很好。 这被称为SampleSyncAdapter,非常值得: 我成功地完成了所有操作,但在示例或文档中都找不到添加链接到自定义活动的类别的方法,与下面的屏幕截图完全相同: (我只有带有复选框的“同步帐户”选项) 因此,我的问题是:如何添加帐户设置类别?的答案为通用解决方案提供了一个新的解决方案。下面是如何修改源代码以添加自定义首选项(Android 2.3.4),如上面的屏幕截图所示: 请记住,帐户管理器是作为系统进程运行的,

我曾经尝试过谷歌的一个很好的例子,从一个Web服务同步联系人,效果很好。 这被称为SampleSyncAdapter,非常值得:

我成功地完成了所有操作,但在示例或文档中都找不到添加链接到自定义活动的类别的方法,与下面的屏幕截图完全相同:

(我只有带有复选框的“同步帐户”选项)

因此,我的问题是:如何添加帐户设置类别?

的答案为通用解决方案提供了一个新的解决方案。下面是如何修改源代码以添加自定义首选项(Android 2.3.4),如上面的屏幕截图所示:

  • 请记住,帐户管理器是作为系统进程运行的,因此,如果代码中存在未处理的异常、缺少清单条目或xml中存在错误,手机将崩溃

  • 创建
    account\u preferences.xml
    资源文件

    • 实际首选项屏幕的android:key
      值必须指定为
      “帐户设置”
    • 如果要将自定义首选项放入类别中,则需要 定义时关闭
      首选项类别
      标记;如果您将
      首选项屏幕
      置于类别内,则当您单击首选项时,手机将崩溃
    XML:

  • 创建首选项活动并将其添加到清单中。我使用了从答案到的示例代码的简化版本

    a将活动添加到清单中

    <activity android:label="Account Preferences" android:name=".AccountPreferences"
       android:theme="@android:style/Theme.Dialog" android:excludeFromRecents="true" />
    
    c。下面是带有硬编码字符串的
    首选项\u 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>
    
    
    
  • 就这样。安装代码,打开帐户,然后选择SampleSyncAdapter帐户(user1)。选择帐户设置,您将看到设置活动

  • 看看这个:它对我有用
    <activity android:label="Account Preferences" android:name=".AccountPreferences"
       android:theme="@android:style/Theme.Dialog" android:excludeFromRecents="true" />
    
    public class AccountPreferences extends PreferenceActivity {
        @Override
        public void onCreate(Bundle icicle) {
            super.onCreate(icicle);
            addPreferencesFromResource(R.xml.preferences_resources);
        }
    }
    
    <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>