13.3.1. 更新首选项

优质
小牛编辑
133浏览
2023-12-01

13.3.1.更新首选项

在将用户的位置信息广播出去之前,我们需要事先征得用户本人的同意。这不只是个人偏好,更牵涉到个人隐私。首选项就是询问用户本人意愿的一个好地方。在这里,我们可以使用ListPreference。它可以提供一列选项,同时为每个选项对应一个值。

为此我们在strings.xml中添加两列string资源:一列给用户看,表示选项的正文;一列表示每一选项对应的值。修改后的string.xml文件如下:

<?xml version="1.0" encoding="utf-8"?>

<resources>

...

<string-array name="providers">

<item>None, please</item>

<item>GPS via satellites!</item>

<item>Mobile Network will do</item>

</string-array>

<string-array name="providerValues">

<item>NONE</item>

<item>gps</item>

<item>network</item>

</string-array>

</resources>

留意这两列string资源是一一对应的,因此其下的条目数相等。

已经有了选项的名与值,接下来修改prefs.xml。

例 13.6. 修改过的 res/xml/prefs.xml

<?xml version="1.0" encoding="utf-8"?>

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

<EditTextPreference android:title="@string/titleUsername"

android:summary="@string/summaryUsername" android:key="username"></EditTextPreference>

<EditTextPreference android:title="@string/titlePassword"

android:password="true" android:summary="@string/summaryPassword"

android:key="password"></EditTextPreference>

<EditTextPreference android:title="@string/titleApiRoot"

android:summary="@string/summaryApiRoot" android:key="apiRoot"></EditTextPreference>

<ListPreference android:title="@string/titleProvider"

android:summary="@string/summaryProvider" android:key="provider"

android:entryValues="@array/providerValues" android:entries="@array/providers" />

<!-- -->

<ListPreference android:entryValues="@array/intervalValues"

android:summary="@string/summaryUpdaterInterval" android:title="@string/titleUpdaterInterval"

android:entries="@array/interval" android:key="interval"></ListPreference>

</PreferenceScreen>

  1. 新加的ListPreference提供了三个选项:通过GPS、通过网络、不跟踪位置。