Android Wear 中的持久设置

Persistent Settings in Android Wear

我开始开发我的第一个 Android Wear 表盘,但在理解设置概念时遇到了一些问题。

我的 watchface 的用户应该能够直接在手表上设置一些首选项 - 例如不同的颜色。

但是这些设置应该如何持久化到手表上呢?来自 Google 的所有样本都使用 Wearable.NodeApi.getLocalNode。但据我所知,这是为了通过互联网同步不同(?)手表之间的设置。至少根据 https://developer.android.com/training/wearables/data-layer/index.html

上的指南

但是这种机制是否也使设置持久化,还是我必须自己实现持久化(例如使用 SharedPreferences)。

我对这个话题的看法是,如果我改变这些设置,例如通过我的 phone 上的 UI,它们通过 DataItems 同步到我所有的手表 - 但在每只手表上我都必须存储这些设置。这是正确的吗?

一般来说,DataApi 在会话之间在本地持久保存数据项 - 但它不太可靠,并且 很多 不如使用 SharedPreferences 方便。如您所述,它主要用于在设备之间同步数据;存储数据是事后才想到的。根据我的经验,数据存储和同步非常不同,您需要分别使用各自的 API 来实现。

然而,重新发明轮子是没有意义的。如果你的表盘在两台设备上都有配置,既需要同步到另一台设备又需要本地存储,我建议你看看PrefSyncService。这是我为此类用例设计的开源 Android class。

要将 phone 的配置更改应用到您的 运行 表盘,请使用 OnSharedPreferenceChangeListener。在您的 Engine 中,使用如下代码:

private class Engine 
        extends CanvasWatchFaceService.Engine
        implements SharedPreferences.OnSharedPreferenceChangeListener {

    private SharedPreferences settings;

    @Override
    public void onCreate(SurfaceHolder surfaceHolder) {
        super.onCreate(surfaceHolder);

        settings = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
        settings.registerOnSharedPreferenceChangeListener(this);

        ...other setup code...
    }

    @Override
    public void onDestroy() {
        settings.unregisterOnSharedPreferenceChangeListener(this);

        ...other teardown code...

        super.onDestroy();
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences settings, String key) {
        ...update your watch face here...
    }
}