Pertanyaan Bisakah saya memasukkan android: defaultValue trait untuk RingtonePreference, via XML?


Apakah ada cara untuk menambahkan nilai default dalam RingtonePreference, melalui XML? Sebagai contoh, inilah yang prefer.xml saya terlihat seperti.

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

Jika memungkinkan, saya ingin mengatur RingtonePreference ke nada dering default, seperti ini:

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

5
2017-11-20 21:08


asal


Jawaban:


Anda dapat menentukan default di XML. Seperti yang Anda katakan, itu membutuhkan URI. Sederhanakan URI default untuk apa yang Anda butuhkan. Misalnya, untuk suara alarm default, Anda akan memasukkan:

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

Untuk pemberitahuan Anda akan memasukkan:

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

Dan lain-lain


15
2017-07-05 09:52



Mencari tahu pekerjaan, dalam mengatur nada dering default.

Untuk orang-orang yang menggunakan keduanya RingtonePreference dan PreferenceManager.setDefaultValues(), android:defaultValue pada suatu RingtonePreference mengambil string ke URI nada dering. Dengan memberikan string kosong, Anda mengubah preferensi menjadi "diam", sementara string lain mungkin tidak mengarah ke URI yang valid.

Pekerjaan-sekitar, kemudian, adalah untuk memberikan string palsu, seperti 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" />

Saat menelepon PreferenceManager.setDefaultValues(), ambil preferensi, dan periksa apakah string palsu sedang disimpan:

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

4
2017-11-28 19:40