Постоянные настройки в Android Wear

Я начал разрабатывать свой первый циферблат Android Wear, и у меня возникли проблемы с пониманием концепции настроек.

Пользователь моего циферблата должен иметь возможность устанавливать некоторые предпочтения прямо на часах - например, разные цвета.

Но как сохранить эти настройки на часах? Все примеры из Google используют Wearable.NodeApi.getLocalNode. Но, насколько я понял, это предназначено для синхронизации настроек между разными (?) Часами через Интернет. По крайней мере, согласно руководству на https://developer.android.com/training/wearables/data-layer/index.html

Но делает ли этот механизм настройки постоянными, или я должен сам реализовать постоянство (например, с помощью SharedPreferences).

Я считаю, что если я изменю эти настройки, например, через пользовательский интерфейс на моем телефоне, они будут синхронизированы со всеми моими часами через DataItems, но на всех часах мне придется хранить эти настройки. Это правильно?

1 ответ

Решение

В общем, DataApi будет сохранять элементы данных локально между сессиями - но это менее надежно и намного менее удобно, чем использование SharedPreferences, Как вы заметили, он в основном предназначен для синхронизации данных между устройствами; хранение данных - это запоздалая мысль. По моему опыту, хранение и синхронизация данных достаточно различны, поэтому вам нужно реализовать оба этих компонента по отдельности, используя API-интерфейсы, предназначенные для каждого из них.

Однако нет смысла изобретать велосипед. Если ваш циферблат будет настроен на обоих устройствах, которые требуют как синхронизации с другим устройством, так и локального хранения, могу я предложить вам посмотреть PrefSyncService. Это класс Android с открытым исходным кодом, который я разработал именно для такого случая использования.

Чтобы применить изменения конфигурации с телефона к вашему работающему циферблату, используйте 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...
    }
}
Другие вопросы по тегам