, возьмите предпочтение и проверьте, сохраняется ли фиктивная строка:

ли способ добавить значение по умолчанию в RingtonePreference через XML? Например, вот как выглядит мой preference.xml.

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

Если возможно, я бы хотел установить RingtonePreference на мелодию звонка по умолчанию, например:

<RingtonePreference android:key="alarm"
android:title="Alarm" android:name="Alarm"
android:summary="Select an alarm"
android:ringtoneType="alarm" android:showDefault="true"
android:defaultValue="defaultRingtone" />
 Japtar28 нояб. 2010 г., 17:07
Попробовал следующие 2 без удачи: android: defaultValue = "Рингтон по умолчанию" android: defaultValue = "0"
 Japtar28 нояб. 2010 г., 17:43
Удачи с этим: defaultValue = "". Это устанавливает по умолчанию "тихий", однако. Кажется, RingtonePreference ожидает строковое значение, где находится рингтон. Чтобы получить значение по умолчанию, мне нужно было бы получить строку для мелодии по умолчанию в настройках.

Ответы на вопрос(2)

Решение Вопроса

Для людей, которые используют обаRingtonePreference а такжеPreferenceManager.setDefaultValues(), android:defaultValue наRingtonePreference принимает строку к URI рингтона. Предоставляя пустую строку, вы по умолчанию предпочитаете «молчание», в то время как другие строки, вероятно, приведут к отсутствию действительного URI.

Обходной путь, таким образом, заключается в предоставлении фиктивной строки, такой как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" />

При звонкеPreferenceManager.setDefaultValues(), возьмите предпочтение и проверьте, сохраняется ли фиктивная строка:

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

для этого нужен URI. Просто поместите URI по умолчанию для того, что вам нужно. Например, для звукового сигнала по умолчанию вы должны поставить:

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

Для уведомления вы должны поставить:

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

И т.п.

Ваш ответ на вопрос