我可以通过XML为RingtonePreference插入android:defaultValue特征吗?

Jap*_*tar 5 xml android default preferences ringtone

有没有办法通过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" />
Run Code Online (Sandbox Code Playgroud)

如果可能,我想将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" />
Run Code Online (Sandbox Code Playgroud)

Inc*_*App 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" />
Run Code Online (Sandbox Code Playgroud)

对于通知,您可以:

android:defaultValue="content://settings/system/notification_sound"
Run Code Online (Sandbox Code Playgroud)

等等.


Jap*_*tar 4

找到了一个解决方法,设置默认铃声。

RingtonePreference对于同时使用 a和 的人来说PreferenceManager.setDefaultValues()android:defaultValueaRingtonePreference会将字符串传入铃声的 URI。通过提供空字符串,您将默认首选项为“silence”,而其他字符串可能会导致没有有效的 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" />
Run Code Online (Sandbox Code Playgroud)

调用时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);
  }
}
Run Code Online (Sandbox Code Playgroud)