-1

我正在使用PreferenceScreen在我的 Android 应用程序中设置一些用户首选项。它适用于几个ListPreferenceCheckboxPreference项目,但我无法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);
  }
}
4

1 回答 1

1

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

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

于 2013-06-12T00:17:39.523 回答