【发布时间】:2014-06-25 15:02:47
【问题描述】:
我使用 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);
}
这是在渲染器类中
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)
提前致谢!!
【问题讨论】:
-
也发布日志内容
-
我粘贴了我的 logcat 详细信息
-
什么是
storedPreference? -
是字符串变量
-
我的意思是在 Renderer 类中
标签: android opengl-es-2.0 sharedpreferences android-preferences live-wallpaper