我正在使用PreferenceScreen
在我的 Android 应用程序中设置一些用户首选项。它适用于几个ListPreference
和CheckboxPreference
项目,但我无法RingtonePreference
正常工作。将显示相应的铃声对话框,并且可以选择,但永远不会保存选择。
无论我选择什么,我的应用程序都只会播放默认声音。每当我重新打开铃声对话框时(无论是在做出选择后立即,还是在退出应用程序并返回后),它总是只选择默认项目。我有一个显示首选项值的字段,它始终显示选择了默认声音,即使在首选项屏幕上更改它之后也是如此。我还确认,当我使用 DDMS 监控设备上的相应 xml 文件(在 /data/data/myapp/shared_prefs 中)时,它没有改变。如果我更改其他项目(例如 a CheckboxPreference
),我会看到 shared_prefs 文件实时更改。我已经将我的剥离PreferenceScreen
到最低限度,它的行为仍然相同。我尝试在手机上更改键名、默认值和清除应用程序数据.. 似乎没有任何效果。
我确实在 SO(此处和此处)上发现了 2 个类似的问题,但它们已有几个月的历史,没有答案和/或提出问题的人放弃并尝试了另一种方法。我想弄清楚为什么它看起来不像设计的那样工作......或者至少,找到一种合适的方法来完成同样的事情。
我的代码的相关部分如下..提前谢谢!
/res/xml/preferences.xml:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<RingtonePreference
android:key="alertSound"
android:ringtoneType="notification"
android:summary="Select audio notification sound"
android:title="Alert Sound" >
</RingtonePreference>
</PreferenceScreen>
/src/myapp/EditPrefsActivity.java:
public class EditPrefsActivity extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
settings = PreferenceManager.getDefaultSharedPreferences(this);
addPreferencesFromResource(R.xml.preferences);
}
}