如何具有自定义身份验证器的默认首选项?

时间:2018-11-29 22:53:59

标签: android android-preferences android-authenticator

我已经为我的应用创建了custom authenticator。现在,我可以允许用户删除他们想要的帐户了。我知道我在身份验证器XML文件中为身份验证器定义了一个设置屏幕:

<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
    android:accountType="@string/authentication_account_type"
    android:icon="@drawable/ic_launcher"
    android:smallIcon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:accountPreferences="@xml/authenticator_preferences" />

最后一个属性android:accountPreferences是我定义PreferenceScreen XML的地方。这就是我遇到的麻烦...据我了解,最终用户单击设备设置下的帐户时,将显示android:accountPreferences中定义的首选项。但是,如何从这些首选项中读取信息?还是处理每个首选项的点击事件?我希望做的就是允许用户直接从操作系统提供的首选项屏幕中删除其帐户。

我已经研究了SO上的其他潜在解决方案:

Android: read preferences set in authenticator xml

Android account authenticator: distinguish between accounts in preference screen

Can't access preferences set in account-authenticator in Android

但是,我从上述先前的问题中找到的最佳答案是在<intent>中包含一个<PreferenceScreen>标记,并启动您定义的设置活动。但是,这对我来说没有意义...我看着我的个人电话,每个拥有的帐户都显示了操作系统固有的首选项屏幕。我是否应该以相同的方式定义自己的偏好?我看过三星Galaxy S9和Pixel 3,两者的设置屏幕都是原生的。

如何获得相同的效果?更重要的是,我如何与这些设置进行交互?一如既往,在此方面的任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

万一有其他人遇到此问题,我可以自己解决。我最终要寻找的是具有Android OS本身提供的设置屏幕,而不必定义自己的自定义设置屏幕。事实证明,该解决方案非常简单:只需不在身份验证器XML中定义帐户设置屏幕即可:

<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
    android:accountType="@string/authentication_account_type"
    android:icon="@drawable/ic_launcher"
    android:smallIcon="@drawable/ic_launcher"
    android:label="@string/app_name" />

在删除后,如果您进入设备设置中的自定义帐户设置,则现在应该会看到一个屏幕,其中包含删除帐户以及同步帐户的选项。尽管由于我自己还没有尝试过,所以我不确定100%,但是我认为同步帐户涉及为您的应用实现同步适配器。

此外,如果您想覆盖操作系统提供的默认设置屏幕,那就是使用android:accountPreferences="@xml/authenticator_preferences"的时候。您可以使用<Preference>属性为您定义的<PreferenceScreen><intent>启动活动。

希望对您有帮助。如果您有任何疑问,请告诉我。