android – 铃声优先级未在SharedPreferenceChanged上触发

android – 铃声优先级未在SharedPreferenceChanged上触发,第1张

概述我的首选项将在更改后触发onSharedPreferenceChanged事件.它适用于所有首选项:复选框,列表,自定义等.但是如果从铃声首选项中选择了一个铃声,则不会被调用.我有这个代码: <CheckBoxPreference android:title="@string/pref_notification" android:defaultValue="true" androi 我的首选项将在更改后触发onSharedPreferenceChanged事件.它适用于所有首选项:复选框,列表,自定义等.但是如果从铃声首选项中选择了一个铃声,则不会被调用.我有这个代码:
<CheckBoxPreference androID:title="@string/pref_notification"        androID:defaultValue="true" androID:summary="@string/pref_notification_summary"        androID:key="prefNotification" />    <ringtonePreference androID:title="@string/pref_ringtone"            androID:key="prefringtone"            androID:summary="@string/pref_ringtone_summary" androID:ringtoneType="all" />    <CheckBoxPreference androID:title="@string/pref_vibrate"        androID:defaultValue="true" androID:summary="@string/pref_vibrate_summary"        androID:key="prefVibrationOn" />    <ListPreference androID:title="@string/pref_notification_interval"        androID:summary="@string/pref_notification_interval_summary"        androID:key="prefNotificationInterval" androID:defaultValue="60"        androID:entrIEs="@array/prefs_interval" androID:entryValues="@array/prefs_interval_values" />

和我的课:

public class TimePrefsActivity extends PreferenceActivity implements OnSharedPreferencechangelistener {@OverrIDeprotected voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    context = this;    addPreferencesFromresource(R.layout.preferences);               Preference dbPref = (Preference) findPreference("prefDeleteDb");        dbPref.setonPreferenceClickListener(new OnPreferenceClickListener() {        public boolean onPreferenceClick(Preference preference)        {            showWipeDbDialog();            return true;        }    });}@OverrIDepublic voID onResume() {    super.onResume();    prefs = PreferenceManager.getDefaultSharedPreferences(this);    prefs.registerOnSharedPreferencechangelistener(this);    toggleEnableList();}@OverrIDepublic voID onPause() {    prefs.unregisterOnSharedPreferencechangelistener(this);    super.onPause();}@OverrIDepublic voID onSharedPreferenceChanged(SharedPreferences arg0,String arg1){       boolean enabled = toggleEnableList();               if (enabled)    {        OnBootReceiver.setAlarm(TimePrefsActivity.this);                    }    else    {        OnBootReceiver.cancelAlarm(TimePrefsActivity.this);    }}}

除了铃声首选项之外,所有的首选项都可以在SharedPreferenceChanged上达到方法.有没有人有想法?谢谢.

解决方法 我也遇到了同样的问题,似乎是androID系统中的一个BUG.
调试代码后,我发现侦听器没有添加到我们的铃声优先级侦听器映射中,与其他类(例如ListPreference)不同.

我opened a ticket,但是现在我发现了一种使用OnPreferencechangelistener克服它的方法.
我的代码将偏好摘要设置为所选铃声,可以使用您的逻辑.

首先使您的活动实现OnPreferencechangelistener并写入onPreferenceChange方法

@OverrIDepublic boolean onPreferenceChange(Preference preference,Object newValue) {    updateringtoneSummary((ringtonePreference) preference,Uri.parse((String) newValue));    return true;}private voID updateringtoneSummary(ringtonePreference preference,Uri ringtoneUri) {    ringtone ringtone = ringtoneManager.getringtone(this,ringtoneUri);    if (ringtone != null)        preference.setSummary(ringtone.getTitle(this));    else        preference.setSummary("Silent");}

请注意,与onSharedPreferenceChanged不同,在优先级更新之前调用onPreferenceChange,因此您必须使用newValue参数来获取所选数据,而不是从首选项中获取.

然后,将侦听器设置为OnResume:

@OverrIDeprotected voID onResume() {    super.onResume();    // A patch to overcome OnSharedPreferenceChange not being called by ringtonePreference BUG     ringtonePreference pref = (ringtonePreference) findPreference(getString(R.string.pref_ringtone));    pref.setonPreferencechangelistener(this);}

希望这可以帮助.

总结

以上是内存溢出为你收集整理的android – 铃声优先级未在SharedPreferenceChanged上触发全部内容,希望文章能够帮你解决android – 铃声优先级未在SharedPreferenceChanged上触发所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1131816.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存