代码之家  ›  专栏  ›  技术社区  ›  Japtar

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

  •  5
  • Japtar  · 技术社区  · 14 年前

    有没有办法通过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 android:key="alarm"
    android:title="Alarm" android:name="Alarm"
    android:summary="Select an alarm"
    android:ringtoneType="alarm" android:showDefault="true"
    android:defaultValue="defaultRingtone" />
    
    2 回复  |  直到 14 年前
        1
  •  15
  •   IncrediApp    13 年前

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

    等。

        2
  •  4
  •   Japtar    14 年前

    找到了一个办法,在设置默认铃声。

    对于同时使用 RingtonePreference PreferenceManager.setDefaultValues() , android:defaultValue 在一个 铃声参考 接收铃声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" />
    

    打电话时 首选项管理器.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);
      }
    }