我使用openGL创建了android动态壁纸。它运行正常。现在我想使用共享首选项在我的动态壁纸中设置设置。我不知道如何获取首选项值。
任何人都可以告诉我如何获得共享偏好值并将其用于渲染球体。这是我的首选项xml,
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
>
<ListPreference
android:entryValues="@array/textureitems_values"
android:entries="@array/textureitems"
android:summary="Select rotation speed"
android:title="Rotation Speed"
android:key="rotspeed"
>
</ListPreference>
<ListPreference
android:entryValues="@array/planetitems_values"
android:entries="@array/planetitems"
android:summary="Select Planet"
android:title="Planet"
android:key="moreapps"
>
</ListPreference>
<ListPreference
android:entryValues="@array/timeitems_values"
android:entries="@array/timeitems"
android:summary="Select time"
android:title="Time"
android:key="time"
>
</ListPreference>
<Preference android:title="More Apps" android:summary="To want more apps like this" android:key="mypref" />
我可以从哪个类中获取首选项值并将这些值应用于渲染?
编辑:这是我正在尝试的代码,这是在壁纸服务中,
class MyEngine extends GLEngine implements
SharedPreferences.OnSharedPreferenceChangeListener,
SensorEventListener {
NeheLesson08Renderer renderer;
public MyEngine() {
super();
// handle prefs, other initialization
renderer = new NeheLesson08Renderer();
sharedPreferences = NeheLesson08WallpaperService.this.getSharedPreferences(PREFERENCES, 0);
sharedPreferences.registerOnSharedPreferenceChangeListener(this);
onSharedPreferenceChanged(sharedPreferences, null);
renderer.setContext(getBaseContext());
setRenderer(renderer);
setRenderMode(RENDERMODE_CONTINUOUSLY);
}
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
sharedPreferences = getSharedPreferences(PREFERENCES, MODE_PRIVATE);
String rotspeed = null;
String storedPreference = sharedPreferences.getString("rotspeed", "key");
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("rotspeed", storedPreference); // value to store
editor.commit();
System.out.println("stored procedure values::"+storedPreference);
}
这是在Renderer类
中 storedPreference= sharedPreferences.getString("rotspeed", "key");
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("rotspeed", storedPreference); // value to store
editor.commit();
System.out.println("stored procedure values in rendere::"+storedPreference);
我的Logcat看起来像,
06-26 01:42:38.285: E/AndroidRuntime(4778): FATAL EXCEPTION: main
06-26 01:42:38.285: E/AndroidRuntime(4778): java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
06-26 01:42:38.285: E/AndroidRuntime(4778): at android.app.SharedPreferencesImpl.getString(SharedPreferencesImpl.java:224)
06-26 01:42:38.285: E/AndroidRuntime(4778): at com.srashtaa.planets3dgalaxylivewallpaper.NeheLesson08Renderer.LoadPreferences(NeheLesson08Renderer.java:155)
06-26 01:42:38.285: E/AndroidRuntime(4778): at com.srashtaa.planets3dgalaxylivewallpaper.NeheLesson08Renderer.setContext(NeheLesson08Renderer.java:146)
06-26 01:42:38.285: E/AndroidRuntime(4778): at com.srashtaa.planets3dgalaxylivewallpaper.NeheLesson08WallpaperService$MyEngine.<init>(NeheLesson08WallpaperService.java:42)
06-26 01:42:38.285: E/AndroidRuntime(4778): at com.srashtaa.planets3dgalaxylivewallpaper.NeheLesson08WallpaperService.onCreateEngine(NeheLesson08WallpaperService.java:26)
提前致谢!!
答案 0 :(得分:0)
编写一个在问题中使用xml的PreferenceActivity
类。在SharedPreferences
:
onCreate
public class MyPreferencesActivity extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.<YourXml>);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
//Get preference values
String value = prefs.getString(<Key>, <DefaultValue>);
}