2010-11-20 3 views
5

Gibt es eine Möglichkeit, einen Standardwert in einer RingtonePreference per XML hinzuzufügen? Hier ist zum Beispiel, wie meine preference.xml aussieht.Kann ich ein Androide: DefaultValue-Merkmal für RingtonePreference über XML einfügen?

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

Wenn möglich, würde Ich mag die RingtonePreference auf den Standard Klingelton, wie folgt aus:

<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

versucht, die folgenden 2 ohne Glück: android: defaultValue = "Standard-Klingelton" android: defaultValue = "0" – Japtar

+0

Mehr Glück mit diesem: defaultValue = "". Dies setzt den Standardwert jedoch auf "still". Es scheint, dass RingtonePreference einen String-Wert erwartet, in dem sich ein Klingelton befindet. Um den Standardwert zu erhalten, müsste ich die Zeichenfolge für den Standardklingelton in den Einstellungen abrufen. – Japtar

Antwort

4

eine Behelfslösung schaut hat, in den Standard-Klingelton einstellen.

Für die Menschen, die beide verwenden eine RingtonePreference und PreferenceManager.setDefaultValues(), android:defaultValue auf einem RingtonePreference nimmt in einem String in einen URI Klingelton. Wenn Sie eine leere Zeichenfolge angeben, verwenden Sie standardmäßig die Einstellung "Stille", während andere Zeichenfolgen wahrscheinlich zu keinem gültigen URI führen.

Die Work-around ist es also, eine falsche Zeichenfolge zu bieten, wie 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" /> 

Wenn PreferenceManager.setDefaultValues() Aufruf, den Vorzug greifen, und überprüfen, ob die falsche Zeichenfolge gespeichert wird:

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

Sie können den Standard im XML definieren. Wie Sie gesagt haben, benötigt es einen URI. Setzen Sie einfach den Standard-URI für das, was Sie brauchen. Zum Beispiel klingen für einen Standard-Alarm würden Sie setzen:

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

Für eine Benachrichtigung würden Sie setzen:

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

Etc.

Verwandte Themen