0

Android Wear(minSdkVersion = 21、targetSdkVersion = 23)の時計面を開発し、Android用Google Fit APIを統合しています。CanvasWatchFaceServiceのカスタム放送受信機

与えられたユーザーの選択した時間間隔でフィットデータをバックグラウンドでポーリングして、ウォッチフェイスに戻したいと思います。そこで、Serviceクラスを拡張し、SensorEventListener、GoogleApiClient ConnectionCallbacks、GoogleApiClient.OnConnectionFailedListenerなどを実装するサービスを作成しました。フィットAPIと心臓センサーデータを読み込むためにFitness APIを使用します。

次に、カスタムBroadcastReceiverを使用してCanvasWatchFaceServiceを拡張する標準クラスであるウォッチフェイスに値(カロリー、距離、ステップなど)を渡します。

私が達成したいのは、常にウォッチフェイスで利用可能なフィットネス変数を更新することです。そのため、ユーザーが相互作用して周囲またはミュートされたモードを終了すると、表示する必要があるデータは既にそこにあります。数秒かかることがあるので、その時点でFitness APIを使用して読み込むことなく画面に描画する必要があります。

これは機能します。データは受信機によって時計面で受信され、変数値が正しく設定されます。私は単純なcanvas.drawTextを使って画面に出力します。私は、インタラクティブモード(ウォッチフェイスの表示とアクティブ)、もちろんポーリング時間間隔に応じて更新され、さらにウォームフェイスをデバッグしている場合は、onTimeTickが呼び出されたときにアンビエントモードでアップデートされます(usbまたはブルートゥース)。

デバッガを切断してウォッチ・フェイスが周囲モードになるとすぐに、メッセージがブロードキャスト・レシーバによって受信されなくなるようです。

私は間違っていますか?私は本当にこれで挫折しています。

+0

あなたの説明から分かりにくいですが、あなたのアップデータの「サービス」が無期限に稼働することを期待しているようですね。 – String

+0

はい、stopServiceが呼び出されたときに時計の顔のonDestroyが表示されます。 – Veertualia

答えて

0

Android OSは、処理が終了すると、すぐに背景であるServiceを削除します。ライフサイクルの基本です。これについてはthe documentationで詳しく読むことができます。

ご使用のケースでは、BroadcastReceiverを設定し、ポーリング間隔でAlarmManager.setExactAndAllowWhileIdle()でトリガーします。これをすでにWatchFaceServiceサブクラスにある既存のBroadcastReceiverにロールするか、ポーリングの代わりに新しいサブタイトルを作成したい場合がありますService

また、どのくらいの頻度で投票しているのか分かりませんが、時計をスリープ状態にしている間にこれを頻繁に行うことは、バッテリ寿命に重大な影響を与える可能性があります。心に留めておくだけのもの。時計がしばらく眠っているときに、周波数が徐々に低下するようなことをしたいことがあります。

+0

私はWatchFaceServiceでWakefulBroadcastReceiver型のBroacastReceiverクラスを作成し、繰り返しループが必要だったので 'setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP、5000、DATA_POLL_INTERVAL_MS、alarmIntent) 'を使って同じことをしました。 参考文献:https://developer.android.com/training/scheduling/alarms.html(私はあなたの答えをupvotedしかし、私は15の評判を持っていない、したがってそれは表示されていません)。 – Veertualia

+0

ありがとう!あなたは私の答えを受け入れることができますか? – String

+0

回答受付中です! – Veertualia

関連する問題