SharedPreference changes not reflected in my wallpaper service

I create live wallpapers where I need to change the speed of the car in the scene settings, and I need to return to the wallpaper service when I press the return button. In my preference activity, I save the list preference changes in general settings, such as: -

@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 performed using extension and extension of service life. If I want to reflect the changes in my list preference in the service, how to do it. This is what I did, but it does not seem to work.

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 .xml array

 <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 change in my list does not change in my service. Am I doing something wrong?

+4
source share
2 answers

Solved!

I set values ​​incorrectly in my PreferenceActivity, and I did not use OnSharedPreferenceChangeListener correctly.

Decision: -

  ListPreference listPreference; @SuppressWarnings("deprecation") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.prefs); listPreference = (ListPreference) findPreference("listPref"); } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { SharedPreferences customSharedPreference = getSharedPreferences(key, LiveWallpaperSettings.MODE_PRIVATE); SharedPreferences.Editor editor = customSharedPreference.edit(); editor.putString("Speed",listPreference.getValue()); editor.commit(); Log.e("LiveWallpaperSettings", "Speed Value after setting " + customSharedPreference.getString("Speed", "")); } @Override protected void onResume() { super.onResume(); // Set up a listener whenever a key changes getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); } @Override protected void onPause() { super.onPause(); // Unregister the listener whenever a key changes getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); } 
+1
source

A few things: Your XML says your key is "listPref", so when you read the value from prefs, you want to check this key (speed is just the name of the screen)

I'm not sure if the preference changed by the listener is useful ... What I would like to suggest is that in your onResume () you will read the new value from the settings and use that value. This should work fine, since every time you return to your application after changing the settings, onResume () is called.

0
source

Source: https://habr.com/ru/post/1439734/


All Articles