微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – 如何从代码中设置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>

用户更改此首选项时,我手动将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 …

解决方法

我正在搜索如何设置铃声的认值,并实现与您相同的事情,即当未设置首选项时,值为空并且认选择静.但我这样做
// I read my ringtone setting (I read the value from my ringtone_uri key)
// then if it is not set I set the value with the default value from the phone
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
Uri configuredUri = Uri.parse(sharedPrefs.getString("ringtone_uri",Settings.System.DEFAULT_ringtone_URI.toString()));

// then I do this,I save the default ringtone to my settins
if(configuredUri.equals(Settings.System.DEFAULT_ringtone_URI)){
    sharedPrefs.edit()
            .putString("ringtone_uri",Settings.System.DEFAULT_ringtone_URI.toString())
            .commit();
}

我不知道这是否会对你有所帮助,但我希望它会对别人有所帮助.顺便说一下,我发现了这个解决方法

原文地址:https://www.jb51.cc/android/308603.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐