2017-11-25 145 views
0

我開始開發我的第一款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... 
    } 
} 
+0

謝謝您的解釋。我將使用這個庫 - 看起來很棒。 – user1894572

+0

對不起,但我有一個後續問題:我知道我將設置存儲在SharedPreferences中,並且它們會自動同步到手機,例如PrefSyncService需要從Activity或Service中啓動。但是watchafce是從CanvasWatchFaceService.Engine中抽取的。如何正確地將這些更改傳播到引擎,以便我可以應用這些設置。我使用DataApi從PrefSyncService或ConfigActivity與Engine進行通信?或者,我應該在引擎中觸發某個事件,以便再次讀取SharedPreferences。什麼是最好的方式來做到這一點? – user1894572

+0

我使用了'OnSharedPreferenceChangeListener'。我會將它添加到我的答案中,並添加到github回購的文檔中。 – String