android - RingtonePreference not firing onSharedPreferenceChanged -



android - RingtonePreference not firing onSharedPreferenceChanged -

my preferences trigger onsharedpreferencechanged event upon change. works preferences: checkbox, list, custom, etc. won't called if select ringtone ringtonepreference. have code:

<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" />

and class:

public class timeprefsactivity extends preferenceactivity implements onsharedpreferencechangelistener { @override protected 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(); homecoming true; } }); } @override public void onresume() { super.onresume(); prefs = preferencemanager.getdefaultsharedpreferences(this); prefs.registeronsharedpreferencechangelistener(this); toggleenablelist(); } @override public void onpause() { prefs.unregisteronsharedpreferencechangelistener(this); super.onpause(); } @override public void onsharedpreferencechanged(sharedpreferences arg0, string arg1) { boolean enabled = toggleenablelist(); if (enabled) { onbootreceiver.setalarm(timeprefsactivity.this); } else { onbootreceiver.cancelalarm(timeprefsactivity.this); } } }

all preferences, except ringtonepreference, reach method onsharedpreferencechanged. have idea? thanks.

i struggled same problem seems bug in android system. after debugging code noticed listener not added our ringtonepreference listeners map, unlike other classes listpreference.

i opened ticket, found way overcome using onpreferencechangelistener. code sets preference summary selected ringtone, can utilize logic instead.

first create activity implement onpreferencechangelistener , write onpreferencechange method

@override public boolean onpreferencechange(preference preference, object newvalue) { updateringtonesummary((ringtonepreference) preference, uri.parse((string) newvalue)); homecoming 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"); }

notice unlike onsharedpreferencechanged, onpreferencechange called before preference updated, must utilize newvalue parameter selected info instead of getting preference.

then, set listener on onresume:

@override protected void onresume() { super.onresume(); // patch overcome onsharedpreferencechange not beingness called ringtonepreference bug ringtonepreference pref = (ringtonepreference) findpreference(getstring(r.string.pref_ringtone)); pref.setonpreferencechangelistener(this); }

hope helps.

android

Comments

Popular posts from this blog

iphone - Dismissing a UIAlertView -

intellij idea - Update external libraries with intelij and java -

javascript - send data from a new window to previous window in php -