我使用PreferenceScreen
在我的Android應用程序中設置一些用戶首選項。它適用於幾個ListPreference
和CheckboxPreference
項目,但我無法得到RingtonePreference
正常工作。顯示適當的鈴聲對話框,可以選擇,但選擇從不保存。RingtonePreference不保存在PreferenceActivity中
無論我選擇什麼,我的應用程序只播放默認聲音。無論何時我重新打開鈴聲對話框(選擇後立即或退出應用程序並重新開始後),它總是會選擇默認項目。我有一個顯示首選項值的字段,並且它始終顯示默認聲音被選中,即使在首選項屏幕上進行了更改。我還確認,使用DDMS監視設備時,我的設備上的適當xml文件(在/ data/data/myapp/shared_prefs中)不會改變。如果我更改其他項目(例如CheckboxPreference
),則會看到shared_prefs文件實時更改。我已經將我的PreferenceScreen
剝離到最低限度,並且仍然表現相同。我嘗試更改密鑰名稱,默認值和清除手機上的應用程序數據。似乎沒有任何工作。
我確實發現了2個類似的問題已經發布在SO上(here和here),但它們已有幾個月大了,沒有答案和/或提出問題的人放棄了並嘗試了另一種方法。我想弄清楚它爲什麼不按照設計工作......或者至少找到一個合適的方法來完成同樣的事情。
我的代碼的相關部分在下面..先謝謝了!
/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);
}
}
我繼續調整這沒有任何運氣。爲了澄清,我的首選項屏幕有6個不同的項目;其他5個完美工作。我設置了一個OnSharedPreferenceChangeListener,可以正確觸發5個工作偏好項目,但它從不運行此鈴聲首選項。它的行爲基本上就像我在鈴聲選擇對話框中單擊取消而不是OK。該對話框正確顯示,所有通知鈴聲都在列表中,如果點擊它們則播放。但選擇從不保存。 – mike47 2013-02-18 18:54:20
我的'Preference'示例應用程序都能夠保留其'RingtonePreference'。嘗試一個,如https://github.com/commonsguy/cw-omnibus/tree/master/Prefs/FragmentsBC,看看它是否適合你。如果它有效,那麼你可以開始努力縮小你的實施和我的差異。 – CommonsWare 2013-02-27 12:49:13
感謝您的幫助,@CommonsWare,它實際上證明是一個模糊的Android bug與launchMode綁定。我在下面發佈瞭解決方案。 – mike47 2013-06-12 00:20:12