Pergunta

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <PreferenceCategory android:title="Notifications">
    <CheckBoxPreference 
            android:key="vibration"
            android:title="Vibrate" 
            android:summary="Vibrate phone for notifications" />
    <CheckBoxPreference 
            android:key="play_tone"
            android:title="Play Ringtone" 
            android:summary="Play Ringtone for notifications" />
    <RingtonePreference
            android:key="app_ringtone"
            android:dependency="play_tone"
            android:title="Select Ringtone"
            android:ringtoneType="notification"
            android:showDefault="true"
            android:shouldDisableView="true"
            android:summary="Pick a Ringtone" />
    </PreferenceCategory>
</PreferenceScreen>

Este é o meu XML de preferência. Mas,

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.getString("app_ringtone", null);

sempre retorna nulo. Estou depurando um dispositivo (HTC Wildfire).

Foi útil?

Solução

Aqui está um projeto de amostra demonstrando preferências de coleta, incluindo toques. Se isso não funcionar no seu dispositivo, pode haver um problema de compatibilidade com o dispositivo.

Outras dicas

No meu caso, o problema era que eu superei o OnactivityResult in PreferenceActivity e não invocei super.onactivityResult (...). Agora funciona bem:

public synchronized void onActivityResult(final int requestCode,
    int resultCode, final Intent data) {

    super.onActivityResult(requestCode, resultCode, data);
}

XML problemático:

<activity android:name="Activity1" 
    android:label="Activity 1"/>
<activity android:name="Activity2" 
    android:label="Activity 2" />
<activity android:name="Settings"  
    android:label="Settings" />

Eu mudei o Android: name = "Atividade1" para Android: name = ". Atividade1" Para todas as atividades e o código começou a funcionar. O código também falha se o Android: showsilent = "false" atributo está incluído no RingtonePreference Pode ser esse é um bug. Eu descobri isso após muitas tentativas e erros. Quaisquer idéias, pls ilumle @Commonsware.

Trabalhando XML:

<activity android:name=".Activity1" 
    android:label="Activity 1"/>
<activity android:name=".Activity2" 
    android:label="Activity 2" />
<activity android:name=".Settings"  
    android:label="Settings" />
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top