【问题标题】:Can I insert a android:defaultValue trait for RingtonePreference, via XML?我可以通过 XML 为 RingtonePreference 插入一个 android:defaultValue 特征吗?
【发布时间】:2011-05-13 05:03:20
【问题描述】:

有没有办法通过 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" />

【问题讨论】:

  • 尝试了以下2个没有运气:android:defaultValue="Default ringtone" android:defaultValue="0"
  • 运气更好:defaultValue=""。但是,这会将默认设置为“静音”。似乎 RingtonePreference 需要一个字符串值,即铃声所在的位置。那么,要获取默认值,我必须在设置中获取默认铃声的字符串。

标签: android xml default preferences ringtone


【解决方案1】:

想出了一个解决方法,设置默认铃声。

对于同时使用RingtonePreferencePreferenceManager.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);
  }
}

【讨论】:

    【解决方案2】:

    您可以在 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"
    

    等等

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-05
      • 1970-01-01
      • 1970-01-01
      • 2016-03-24
      • 1970-01-01
      • 2017-06-17
      相关资源
      最近更新 更多