2010-11-20 4 views
5

C'è un modo per aggiungere un valore predefinito in un RingtonePreference, via XML? Ad esempio, ecco come appare il mio preference.xml.Posso inserire un androide: defaultValue trait per RingtonePreference, via XML?

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

Se possibile, mi piacerebbe impostare il RingtonePreference alla suoneria predefinita, in questo modo:

<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

provato quanto segue 2 senza fortuna: android: defaultValue = "Suoneria predefinita" android: defaultValue = "0" – Japtar

+0

Avere più fortuna con questo: defaultValue = "". Questo imposta l'impostazione predefinita su "Silenzioso", tuttavia. Sembra che RingtonePreference si aspetti un valore stringa, dove si trova una suoneria. Per ottenere il valore predefinito, quindi, dovrei ottenere la stringa per la suoneria predefinita in Impostazioni. – Japtar

risposta

4

capito un work-around, nel fissare la suoneria predefinita.

Per le persone che utilizza sia un RingtonePreference e PreferenceManager.setDefaultValues(), android:defaultValue su un RingtonePreference prende in una stringa in URI di una suoneria. Fornendo una stringa vuota, si imposta la preferenza su "silenzio", mentre altre stringhe non porteranno probabilmente a un URI valido.

Il work-around, quindi, è quello di fornire una stringa fasullo, come ad esempio 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" /> 

Quando si chiama PreferenceManager.setDefaultValues(), afferrare la preferenza, e verificare se la stringa fasullo viene immagazzinato:

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

È possibile definire il valore predefinito nell'XML. Come hai detto, ha bisogno di un URI. Inserisci semplicemente l'URI di default per ciò di cui hai bisogno. Ad esempio, per un allarme predefinito suono si sarebbe messo:

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

Per una notifica si sarebbe messo:

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

Ecc