2010-11-20 45 views
5

Existe-t-il un moyen d'ajouter une valeur par défaut dans une RingtonePreference, via XML? Par exemple, voici à quoi ressemble mon fichier preferences.xml.Puis-je insérer un trait android: defaultValue pour RingtonePreference, via XML?

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

Si possible, je voudrais mettre l'RingtonePreference la sonnerie par défaut, comme ceci:

<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

Essayé les éléments suivants 2 avec pas de chance: android: defaultValue = "Sonnerie par défaut" android: defaultValue = "0" – Japtar

+0

Avoir plus de chance avec ceci: defaultValue = "". Cela définit la valeur par défaut "silencieux", cependant. Il semble que RingtonePreference attend une valeur de chaîne, où se trouve une sonnerie. Pour obtenir la valeur par défaut, alors, je devrais obtenir la chaîne pour la sonnerie par défaut dans les paramètres. – Japtar

Répondre

4

trouvé un travail autour, dans le réglage de la sonnerie par défaut.

Pour les personnes qui utilisent à la fois un RingtonePreference et PreferenceManager.setDefaultValues(), android:defaultValue sur une RingtonePreference prend dans une chaîne à l'URI d'une sonnerie. En fournissant une chaîne vide, vous préférez par défaut "silence", alors que d'autres chaînes conduiront probablement à aucun URI valide.

est de fournir une chaîne bogus, comme android:defaultValue="defaultRingtone" Le travail autour, puis,:

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

Lorsque vous appelez PreferenceManager.setDefaultValues(), prenez la préférence, et vérifier si la chaîne bogus est stockée:

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

Vous pouvez définir la valeur par défaut dans le fichier XML. Comme vous l'avez dit, il a besoin d'un URI. Mettez simplement l'URI par défaut pour ce dont vous avez besoin. Par exemple, pour une alarme sonore par défaut vous mettriez:

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

Pour une notification vous mettriez:

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

Etc.