我正在使用PreferenceScreen
在我的Android应用中设置一些用户首选项。它适用于多个ListPreference
和CheckboxPreference
项,但我无法使RingtonePreference
正常工作。将显示相应的铃声对话框,并且可以选择该对话框,但永远不会保存选择。
无论我选择什么,我的应用程序都只播放默认声音。每当我重新打开铃声对话框时(在做出选择之后立即或退出应用程序并返回之后),它总是只选择默认项目。我有一个字段来显示首选项值,它总是显示默认声音被选中,即使在首选项屏幕上更改它之后也是如此。我还确认,当我使用DDMS监视时,我的设备上的相应xml文件(在/ data / data / myapp / shared_prefs中)没有改变。如果我更改其他项目(例如CheckboxPreference
),我会看到shared_prefs文件实时更改。我已经将PreferenceScreen
剥离到最低限度,它仍然表现相同。我尝试在手机上更改密钥名称,默认值和清除应用程序数据......似乎没有任何效果。
我确实在SO(here和here)上发现了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);
}
}
答案 0 :(得分:1)
我刚刚找到解决方案!答案最近发布在一个类似的问题:https://stackoverflow.com/a/15887357/1992342
从清单中的EditPrefsActivity android:launchMode="singleInstance"
条目中删除<activity>
可解决问题。显然它是一个[鲜为人知的] Android漏洞。