2010-09-30 112 views
0
<?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> 

這是我的偏好XML。但是,RingtonePreference總是空:(

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

總是返回null。我調試的設備(HTC野火)上。

+0

你怎麼知道它是空的?只是在調試器上,或者你真的強制關閉?如果是這樣,給我們一個堆棧跟蹤。你在getDefaultSharedPreferences或prefs.getString上獲得NPE嗎? – Falmarri 2010-09-30 16:08:24

+0

看看我所做的prefs.getString(「app_ringtone」,null)調用。 – 2010-09-30 16:24:40

+0

我從** SharedPreferences.getAll().keySet()**中發現,「app_ringtone」鍵不在第一位。 – 2010-09-30 17:00:30

回答

2

Here is a sample project展示收集的喜好,包括鈴聲,如果這不適用於您的設備,則可能與設備存在兼容性問題。

+0

這個例子完美地工作。但是,當我對我的應用程序執行相同操作時,鈴聲會重置爲「無聲」。 – 2010-10-11 06:13:15

+0

CommonsWare,請檢查我在下面發佈的新答案,並提供解決方案,如果你能弄清楚實際問題。 – 2010-10-11 08:37:15

1

存在問題的XML:

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

我改變了機器人:名字=「活動1」機器人:名字=」活動1"的所有活動和代碼開始工作。如果android:showSilent =「false」屬性包含在RingtonePreference中,該代碼也會出現故障,可能是這是一個錯誤。經過大量的試驗和錯誤,我發現了這一點。任何想法,請啓迪@Commonsware。

使用XML:

3

在我的情況的問題是,我在PreferenceActivity overrided onActivityResult並沒有援引super.onActivityResult(...)。 現在它工作正常:

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

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

謝謝。它的工作現在。 – 2012-10-04 06:32:23