我通过扩展WallpaperService和Engine类创建了一个实时壁纸。壁纸不会频繁更改,因此为避免不必要的CPU使用,在某些事件(触摸、visibilityChanged等)上仅绘制壁纸。我还使用PreferenceFragment生成壁纸的设置活动。
问题:当用户在设置活动中更改偏好设置时,我希望壁纸能够得到通知并立即使用新设置重新绘制自己。但由于我只在某些事件上读取设置并绘制壁纸,直到这些事件被触发,壁纸的变化才会发生。
希望有解决方案 :) 谢谢。
有人可以帮忙吗? :(
你有两个选择。要么在onVisibilityChanged()
中检查首选项值并相应地更新壁纸。要么使用OnSharedPreferenceChangeListener
,让你的Engine
知道用户何时更改了首选项。
后者的示例。
让你的Engine
实现OnSharedPreferenceChangeListener
接口。
private class MyEngine extends Engine implements OnSharedPreferenceChangeListener {
// A reference to our shared prefs;
private SharedPreferences mPreferences;
@Override
public void onCreate(SurfaceHolder surfaceHolder) {
super.onCreate(surfaceHolder);
mPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
// Register an OnSharedPreferenceChangeListener to our shared prefs
mPreferences.registerOnSharedPreferenceChangeListener(this);
// Your existing code ...
}
@Override
public void onDestroy() {
super.onDestroy();
// Don't forget to unregister the listener
mPreferences.unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
// Whenever the user changes a setting, this method will be called.
// So do what needs to be done here, like redrawing the wallpaper
redrawWallpaper();
}
}