2010-11-20 5 views
5

XML経由でRingtonePreferenceにデフォルト値を追加する方法はありますか?たとえば、私のpreferences.xmlの外観は次のとおりです。RingtonePreferenceのandroid:defaultValue特性を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" /> 
+0

は運で、次の2を試してみましたdefaultValue = "デフォルトの着信音" アンドロイド:defaultValue = "0" – Japtar

+0

さらに運が必要です:defaultValue = ""ただし、デフォルトでは「サイレント」に設定されています。 RingtonePreferenceは、着信音が配置されている文字列の値を期待しているようです。デフォルト値を取得するには、「設定」でデフォルトの着信音の文字列を取得する必要があります。 – Japtar

答えて

4

RingtonePreferencePreferenceManager.setDefaultValues()の両方を使用する人の場合、RingtonePreferenceandroid:defaultValueは、着信音の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); 
    } 
} 
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" 

関連する問題