2010-11-20 13 views
5

¿Hay alguna manera de agregar un valor predeterminado en una referencia de tono de llamada, a través de XML? Por ejemplo, así es como se ve mi preference.xml.¿Puedo insertar un rasgo android: defaultValue para RingtonePreference, a través de XML?

<RingtonePreference android:key="alarm" 
android:title="Alarm" android:name="Alarm" 
android:summary="Select an alarm" 
android:ringtoneType="alarm" android:showDefault="true" /> 

Si es posible, me gustaría establecer el RingtonePreference al tono de llamada predeterminado, como esto:

<RingtonePreference android:key="alarm" 
android:title="Alarm" android:name="Alarm" 
android:summary="Select an alarm" 
android:ringtoneType="alarm" android:showDefault="true" 
android:defaultValue="defaultRingtone" /> 
+0

intentado el siguiente 2 sin suerte: android: defaultValue = "Tono de llamada predeterminado" android: defaultValue = "0" – Japtar

+0

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

Respuesta

4

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); 
    } 
} 
15

Puede definir el valor predeterminado en el XML. Como dijiste, necesita un URI. Simplemente ponga el URI predeterminado para lo que necesita. Por ejemplo, para una alarma de sonido predeterminado que pondría:

<RingtonePreference android:key="alarm" 
android:title="Alarm" android:name="Alarm" 
android:summary="Select an alarm" 
android:ringtoneType="alarm" android:showDefault="true" 
android:defaultValue="content://settings/system/alarm_alert" /> 

Para una notificación que pondría:

android:defaultValue="content://settings/system/notification_sound" 

Etc.

Cuestiones relacionadas