我以下偏好:如何从代码设置RingtonePreference值?
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<RingtonePreference
android:showDefault="true"
android:showSilent="true"
android:title="@string/feed_alert_ringtone"
android:ringtoneType="ringtone|notification|alarm|all"
android:key="alertringtone"
android:persistent="false">
</RingtonePreference>
</PreferenceScreen>
当用户改变这种偏好,我手动开放的保存到数据库:
public boolean onPreferenceChange(Preference pref, Object change) {
String ringtone = change.toString();
// save it to a db
...
return true;
}
我的问题是,当用户关闭,然后得到回到PreferenceScreen
,RingtonePreference
的默认值始终为Silence
。当然,我必须手动设置值。
想这一个在我PreferenceActivity
:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings); // the XML above
String database_ringtone = ... // get the string saved above from db
// and according to some parameters passed
// to the intent
Preference ringtone = findPreference("alertringtone");
ringtone.setDefaultValue(database_ringtone);
// also tried:
ringtone.setDefaultValue(Uri.parse(database_ringtone));
}
不幸的是偏爱停留在 “沉默”(意为空)。我想,当Preference
不是persistent
时,将使用默认值。
我不能使它persistent
,因为首选项用于多个项目,我从数据库中获得的数据根据传递给该意图的一些额外数据而改变。
尽管如此,我不想设置默认值,但是我从数据库中获得的当前值。认为这可能是一个解决方法。所以任何其他方式也会很好。
双重检查保存和从数据库检索正在工作,所以这不是问题。
如何设置代码中的RingtonePreference
值?
编辑:这里有一点解释我想做什么,也许还有另一种方法。
我有几个菜单条目(计数因用户而异),用户可以为其选择铃声。选择铃声适用于上述xml,菜单条目的ID将以Intent
传递到PreferenceActivity
。铃声的URI被存储在数据库中。
当其中一个条目发生变化时,会根据用户所做的铃声选择播放警报。所以他知道哪一个改变了。到目前为止没有问题。
问题是,当用户想要更改他已经为其定义的条目的铃声时。如果用户之前选择了铃声Foo,当点击RingtonePreference
时,应该预先选择铃声Foo。这不是严重的错误(更像是一个小故障),但仍然非常烦人。
据我所知,没有办法预先从代码中选择默认RingtonePreference
?还是我在做“只是错”?
编辑2:Okey,我认为没有办法做到这一点。非常奇怪的是,android核心。允许我们使用Preference
并从中获取值,但不能将值重新输入。一定是真正的匆忙。我很高兴他们允许我们检查代码中的CheckBoxPreference
...
这不是我问的答案。选择铃声并将其存储到数据库中(也可以根据所做的选择播放声音,没有问题)。我只想让'RingtonePreference'反映我之前通过预先选择铃声的选择,当用户再次打开偏好时。我没有添加任何自定义铃声或特殊路径等。 – Markus 2011-05-19 19:09:25