android 有值代码,android – 如何从代码中设置RingtonePreference值?

博客围绕Android开发中RingtonePreference值的设置展开。用户更改偏好时手动将Uri存数据库,但返回PreferenceScreen时默认值为Silence,手动设置无效。因偏好用于多项目且数据随intent额外数据变化,无法持久化,询问如何从代码设置RingtonePreference值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我有以下偏好:

android:showDefault="true"

android:showSilent="true"

android:title="@string/Feed_alert_ringtone"

android:ringtoneType="ringtone|notification|alarm|all"

android:key="alertringtone"

android:persistent="false">

当用户更改此首选项时,我手动将Uri保存到数据库:

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不持久时,将使用默认值.

我无法使其持久化,因为首选项用于多个项目,而我从数据库获取的数据会根据传递给intent的一些额外数据而更改.

不过,我不想设置默认值,而是我从数据库中获取的当前值.认为这可能是一种解决方法.所以任何其他方式也都会很好.

双重检查保存和从DB检索工作正常,所以这不是问题.

如何从代码中设置RingtonePreference值?

编辑:这里有一点解释我想做什么,也许还有另一种方式.

我有几个菜单条目(计数因用户而异),用户可以为其选择铃声.选择铃声适用于上面的xml,菜单条目的ID与Intent一起传递给PreferenceActivity.然后将铃声的URI存储在数据库中.

当其中一个条目改变时,根据用户做出的铃声选择播放警报.所以他知道哪一个改变了.到目前为止没问题.

问题是,当用户想要为他已经为其定义的条目更改铃声时.如果用户在点击RingtonePreference之前选择了铃声Foo,则应该预先选择铃声Foo.这不是严重错误(更像是故障),但仍然非常烦人.

据我所知,没有办法从代码中预选默认的RingtonePreference?或者我这样做“只是错了”?

编辑2:Okey,我认为没有办法做到这一点.非常奇怪,android核心.允许我们使用偏好并从中获取值,但不能重新输入值.一定是真的很快.我很高兴他们允许我们从代码中检查CheckBoxPreference …

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值