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

3
我通过扩展WallpaperService和Engine类创建了一个实时壁纸。壁纸不会频繁更改,因此为避免不必要的CPU使用,在某些事件(触摸、visibilityChanged等)上仅绘制壁纸。我还使用PreferenceFragment生成壁纸的设置活动。

问题:当用户在设置活动中更改偏好设置时,我希望壁纸能够得到通知并立即使用新设置重新绘制自己。但由于我只在某些事件上读取设置并绘制壁纸,直到这些事件被触发,壁纸的变化才会发生。

希望有解决方案 :) 谢谢。

有人可以帮忙吗? :(
3个回答

5

你有两个选择。要么在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();
    }
}

现在我可以让我的应用程序更加高效。谢谢! :) - Sahand Seifi

0

我已经实现了暂停和恢复功能,但我只是不想在每次onVisibilityChanged调用时读取整个首选项。无论如何,还是谢谢你的回答 :) - Sahand Seifi

0
我曾经也在寻找同样的解决方案,后来我自己想到了一个方法:你可以在设置活动中使用LiveData,然后在服务中观察它。这样做会更加容易。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接