一般來說,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...
}
}
謝謝您的解釋。我將使用這個庫 - 看起來很棒。 – user1894572
對不起,但我有一個後續問題:我知道我將設置存儲在SharedPreferences中,並且它們會自動同步到手機,例如PrefSyncService需要從Activity或Service中啓動。但是watchafce是從CanvasWatchFaceService.Engine中抽取的。如何正確地將這些更改傳播到引擎,以便我可以應用這些設置。我使用DataApi從PrefSyncService或ConfigActivity與Engine進行通信?或者,我應該在引擎中觸發某個事件,以便再次讀取SharedPreferences。什麼是最好的方式來做到這一點? – user1894572
我使用了'OnSharedPreferenceChangeListener'。我會將它添加到我的答案中,並添加到github回購的文檔中。 – String