2010-09-30 66 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