通知动态壁纸服务有关设置的更改

时间:2013-06-18 23:41:37

标签: android

我正在通过扩展WallpaperService和Engine类来创建动态壁纸。壁纸不会经常更改,所以为了避免不必要的CPU使用,我只在某些事件上绘制壁纸(触摸,visibilityChanged等)。我也使用PreferenceFragment为壁纸生成设置活动。

问题:当用户更改设置活动中的首选项时,我喜欢壁纸以获得通知并使用新设置尽快重绘自己。但由于我只阅读设置并在某些事件上绘制壁纸,因此在触发这些事件之前,壁纸的更改不会发生。

会很感激解决方案:) thnx。

任何人? :(

3 个答案:

答案 0 :(得分:4)

你有两个选择。检查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();
    }
}

答案 1 :(得分:0)

最好的方法是每帧画一次你的壁纸,但是当可见度改变时,暂停并恢复壁纸上的渲染(WallpaperService.Engine.onVisibilityChanged(boolean))
您可以通过调用GLSurfaceView.onResume()和onPause()来实现。

http://developer.android.com/reference/android/service/wallpaper/WallpaperService.Engine.html#onVisibilityChanged(boolean)
http://developer.android.com/reference/android/opengl/GLSurfaceView.html

答案 2 :(得分:0)

我一直在寻找相同的东西,但发现了自己的解决方案。您可以在设置活动中使用实时数据,然后在服务中对其进行观察。这使它变得容易得多。