2010-11-20 18 views
5

Czy istnieje sposób na dodanie wartości domyślnej w RingtonePreference za pośrednictwem XML? Na przykład oto, jak wygląda mój plik preferencji.xml.Czy mogę wstawić cechę android: defaultValue dla RingtonePreference, przez XML?

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

Jeśli to możliwe, chciałbym ustawić RingtonePreference do domyślnego dzwonka, podobnie jak to:

<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

próbowałem następujące 2 bez powodzenia: Android: defaultValue = "Domyślny dzwonek" android: defaultValue = "0" – Japtar

+0

Po więcej szczęścia z tym: defaultValue = "". Ustawia to jednak domyślnie "cichy". Wygląda na to, że RingtonePreference oczekuje wartości ciągu, w której znajduje się dzwonek. Aby uzyskać wartość domyślną, musiałbym uzyskać ciąg dla domyślnego dzwonka w Ustawieniach. – Japtar

Odpowiedz

4

zorientowali się obejść, w ustawieniu domyślny dzwonek.

Dla osób, które wykorzystuje zarówno RingtonePreference i PreferenceManager.setDefaultValues(), android:defaultValue na RingtonePreference trwa w sznurku do dzwonka za URI. Podając pusty ciąg, domyślnie preferujesz "cisza", podczas gdy inne ciągi prawdopodobnie nie będą dawały prawidłowego identyfikatora URI.

Prace wokół jest więc dostarczenie fałszywego ciąg, takich jak 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" /> 

Dzwoniąc PreferenceManager.setDefaultValues(), chwyć preferencje, i sprawdzić, czy podrobiony ciąg jest przechowywana:

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

Możesz zdefiniować domyślne w XML. Tak jak powiedziałeś, potrzebuje identyfikatora URI. Po prostu wstaw domyślny identyfikator URI do tego, czego potrzebujesz. Na przykład, domyślny dźwięk alarmu będzie można umieścić:

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

Do zgłoszenia będzie można umieścić:

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

Itd