5

XMLを介してRingtonePreferenceにデフォルト値を追加する方法はありますか?たとえば、私の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" />
4

2 に答える 2

15

XMLでデフォルトを定義できます。あなたが言ったように、それは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"

等。

于 2011-07-05T09:52:09.047 に答える
4

デフォルトの着信音を設定する際の回避策を考え出しました。

RingtonePreferenceaとPreferenceManager.setDefaultValues()、の両方を使用する人のために、 android:defaultValueonは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);
  }
}
于 2010-11-28T19:40:03.750 に答える