encontrado una solución temporal, en el establecimiento del tono de llamada predeterminado.
Para la gente que utiliza tanto un RingtonePreference
y PreferenceManager.setDefaultValues()
, android:defaultValue
en un RingtonePreference
toma de una serie de URI de un tono de llamada. Al proporcionar una cadena vacía, está prefiriendo la preferencia a "silencio", mientras que otras cadenas probablemente no generarán un URI válido.
La solución alternativa, entonces, es proporcionar una cadena falsa, como android:defaultValue="defaultRingtone"
:
<RingtonePreference android:key="alarm"
android:title="Alarm" android:name="Alarm"
android:summary="Select an alarm"
android:ringtoneType="alarm" android:showDefault="true"
android:defaultValue="defaultRingtone" />
Al llamar PreferenceManager.setDefaultValues()
, agarra la preferencia, y comprobar si la cadena falsa está siendo almacenada:
// Set the stored preferences to default values defined in options.xml
PreferenceManager.setDefaultValues(this, R.layout.options, false);
// Check the stored string value, under the RingtonPreference tag
final SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
final String savedUri = savedState.getString("alarm", "");
// By default, set the alarm's URI to null
Uri alarmUri = null;
// Check if a String was actually provided
if(savedUri.length() > 0) {
// If the stored string is the bogus string...
if(savedUri.equals("defaultRingtone")) {
// Set the alarm to this system's default alarm.
alarmUri = Settings.System.DEFAULT_ALARM_ALERT_URI;
// Save this alarm's string, so that we don't have to go through this again
final SharedPreferences.Editor saveEditor = saveState.edit();
saveEditor.putString("alarm", alarmUri.toString());
saveEditor.commit();
}
// Otherwise, retrieve the URI as normal.
else {
alarmUri = Uri.parse(savedUri);
}
}
intentado el siguiente 2 sin suerte: android: defaultValue = "Tono de llamada predeterminado" android: defaultValue = "0" – Japtar
Tener más suerte con esto: defaultValue = "". Sin embargo, esto establece el valor predeterminado en "silencio". Parece que RingtonePreference espera un valor de cadena, donde se encuentra un tono de llamada. Para obtener el valor predeterminado, entonces, tendría que obtener la cadena para el tono de llamada predeterminado en Configuración. – Japtar