Постоянные настройки в 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...
}
}