2017-11-25 18 views
0

初めてAndroid Wearウォッチフェイスを開発し始め、設定の概念を理解するのに問題があります。Android Wearの永続的設定

私のウォッチフェイスのユーザーは時計の上にいくつかの設定を行うことができます。異なる色。

しかし、これらの設定を時計でどのように維持する必要がありますか? Googleのすべてのサンプルは、Wearable.NodeApi.getLocalNodeを使用しています。しかし、私が理解できる限り、これはインターネットを介してさまざまな(?)時計の間で設定を同期させることを意図しています。少なくともガイドのところによるhttps://developer.android.com/training/wearables/data-layer/index.html

しかし、このメカニズムは設定を永続化するか、永続性を自分自身で実装する必要がありますか(たとえばSharedPreferencesを使用して)。

このトピックに関する私の見解は、これらの設定を変更した場合です。私の電話機のUIを介して、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は、アクティビティまたはサービスから開始する必要があります。しかし、watchafceはCanvasWatchFaceService.Engineから引き出されます。これらの変更をエンジンに正しく反映させるにはどうすればよいのでしょうか。私はPrefSyncServiceまたはConfigActivityからEngineへの通信にDataApiを使用していますか?または、SharedPreferencesが再び読み込まれるように、エンジンで何らかのイベントをトリガーする必要があります。それをする最善の方法は何ですか? – user1894572

+0

私は 'OnSharedPreferenceChangeListener'を使います。私はそれを私の答えとgithub repoの文書に加えます。 – String

関連する問題