【问题标题】:Live wallpaper openGL using SharedPreferences使用 SharedPreferences 的动态壁纸 openGL
【发布时间】: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


【解决方案1】:

写一个PreferenceActivity 在问题中使用xml 的类。在onCreate 中使用SharedPreferences

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

【讨论】:

  • 感谢您的回答。我将您提到的代码放在我的设置活动中。如何访问或获取偏好值?
  • 我已经尝试过你的代码它获得了共享偏好值但我无法使用这个值。我在哪里得到了 classcastexception。我应该粘贴我的代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多