RingtonePreference未在PreferenceActivity中保存

时间:2013-02-08 21:20:27

标签: android sharedpreferences preferenceactivity ringtone preferencescreen

我正在使用PreferenceScreen在我的Android应用中设置一些用户首选项。它适用于多个ListPreferenceCheckboxPreference项,但我无法使RingtonePreference正常工作。将显示相应的铃声对话框,并且可以选择该对话框,但永远不会保存选择。

无论我选择什么,我的应用程序都只播放默认声音。每当我重新打开铃声对话框时(在做出选择之后立即或退出应用程序并返回之后),它总是只选择默认项目。我有一个字段来显示首选项值,它总是显示默认声音被选中,即使在首选项屏幕上更改它之后也是如此。我还确认,当我使用DDMS监视时,我的设备上的相应xml文件(在/ data / data / myapp / shared_prefs中)没有改变。如果我更改其他项目(例如CheckboxPreference),我会看到shared_prefs文件实时更改。我已经将PreferenceScreen剥离到最低限度,它仍然表现相同。我尝试在手机上更改密钥名称,默认值和清除应用程序数据......似乎没有任何效果。

我确实在SO(herehere)上发现了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);
  }
}

1 个答案:

答案 0 :(得分:1)

我刚刚找到解决方案!答案最近发布在一个类似的问题:https://stackoverflow.com/a/15887357/1992342

从清单中的EditPrefsActivity android:launchMode="singleInstance"条目中删除<activity>可解决问题。显然它是一个[鲜为人知的] Android漏洞。