Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 通知live墙纸服务有关设置的更改_Android - Fatal编程技术网

Android 通知live墙纸服务有关设置的更改

Android 通知live墙纸服务有关设置的更改,android,Android,我正在通过扩展墙纸服务和引擎类来创建实时墙纸。壁纸不会经常更改,因此为了避免不必要的CPU使用,我只在某些事件(触摸、可视性更改等)上绘制壁纸。我还使用PreferenceFragment为墙纸生成设置活动 问题:当用户在“设置”活动中更改首选项时,我希望墙纸得到通知,并使用新设置尽快重新绘制。但是,由于我只读取设置并绘制某些事件的墙纸,墙纸的更改在触发这些事件之前不会发生 希望您能提供以下解决方案:)thnx 有人吗(最好是每帧绘制一次壁纸,但当可视性发生变化时(wallparservice.

我正在通过扩展墙纸服务和引擎类来创建实时墙纸。壁纸不会经常更改,因此为了避免不必要的CPU使用,我只在某些事件(触摸、可视性更改等)上绘制壁纸。我还使用PreferenceFragment为墙纸生成设置活动

问题:当用户在“设置”活动中更改首选项时,我希望墙纸得到通知,并使用新设置尽快重新绘制。但是,由于我只读取设置并绘制某些事件的墙纸,墙纸的更改在触发这些事件之前不会发生

希望您能提供以下解决方案:)thnx


有人吗(

最好是每帧绘制一次壁纸,但当可视性发生变化时(wallparservice.Engine.onVisibilityChanged(boolean))
您可以通过调用GLSurfaceView.onResume()和onPause()来完成此操作。



您有两个选择。检查
onVisibilityChanged()
中的首选项值并相应地更新墙纸。或者使用
OnSharedPreferenceChangeListener
让您的
引擎知道用户何时更改了首选项


后者的示例。

让您的
引擎
实现
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();
    }
}

我也在寻找同样的东西,我发现了自己的解决方案;你可以在你的设置活动中使用实时数据,然后在你的服务中观察它。这使它变得更容易。

现在我可以让我的应用程序更高效。谢谢!:)我已经实现了暂停和恢复,但我只是不想看每个onVisibilityChanged通话的全部偏好。不过还是要谢谢你的回答:)