I am making a live wallpaper where i need to change the speed of a vehicle in setting scene and it needs to get reflected back to the wallpaper service when i press the return button. In my preference activity, i save the list preference changes in shared preferences like this :-
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.prefs); ListPreference listPreference = (ListPreference) findPreference("listPref"); currValue = listPreference.getValue(); Log.e("LiveWallpaperSettings", "currvalue " + currValue); listPreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference arg0, Object arg1) { SharedPreferences customSharedPreference = getSharedPreferences("Speed", LiveWallpaperSettings.MODE_PRIVATE); SharedPreferences.Editor editor = customSharedPreference.edit(); editor.putString("Speed",currValue); editor.commit(); return true; } });
My wallpaper service is made using andengine livewallpaper extension. If i want to reflect the changes in my list preference in the service, how do i do that. This is what i did but it doesn't seem to be working.
My prefs.xml
<PreferenceCategory android:title="Settings"> <ListPreference android:title="Speed" android:summary="Change the Speed" android:key="listPref" android:defaultValue="15" android:entries="@array/listArray" android:entryValues="@array/listValues" /> </PreferenceCategory>
My array.xml
<resources> <string-array name = "listArray"> <item>Slow</item> <item>Medium</item> <item>Fast</item> </string-array> <string-array name = "listValues"> <item>5</item> <item>15</item> <item>30</item> </string-array>
In my service i implement SharedPreferences.OnSharedPreferenceChangeListener and implement the following method
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key) { sharedPreferences = getSharedPreferences("Speed", MODE_PRIVATE); strSpeedValue = sharedPreferences.getString("Speed", "5"); fltSpeedValue = Integer.parseInt(strSpeedValue); final AutoParallaxBackground autoParallaxBackground = new AutoParallaxBackground(0, 0, 0, 10); autoParallaxBackground.attachParallaxEntity(new ParallaxEntity(fltSpeedValue, new Sprite(0,mCamera.getHeight() - this.mParallaxLayer.getHeight(),this.mParallaxLayer, getVertexBufferObjectManager()))); autoParallaxBackground.attachParallaxEntity(new ParallaxEntity(0f, new Sprite(CAMERA_WIDTH/2 - 30, CAMERA_HEIGHT/2,this.mAutoLayer, getVertexBufferObjectManager()))); mMainScene.setBackground(autoParallaxBackground); } @Override protected void onResume() { super.onResume(); // Set up a listener whenever a key changes PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this); } @Override protected void onPause() { super.onPause(); // Unregister the listener whenever a key changes PreferenceManager.getDefaultSharedPreferences(this).unregisterOnSharedPreferenceChangeListener(this); }
But the value that i am changing in my listpreference does not get changed in my service. Am i doing something wrong?