使用SharedPreferences动态壁纸openGL

时间:2014-06-25 15:02:48

标签: android opengl-es-2.0 sharedpreferences android-preferences live-wallpaper

我使用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)

提前致谢!!

1 个答案:

答案 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>);
}