2

サーバーに同期されたタブレットを使用して情報を記録し、その結果でレポートが実行されるアプリケーションがあります。ユーザーは1日中タブレットを使用して過ごし、1日を通して多くの旅行をします。

ユーザーがこれらのタスクを完了する時間はレポートにとって非常に重要であり、デバイスの時間に依存できないことが何度か発生しています。

  1. ユーザーは、より多くの作業を行ったように見せるために、デバイス上で時間を手動で別の時間に設定することがあります。これは、予想よりも多く発生します。
  2. 「自動」に設定された時間に依存する場合、ユーザーがネットワーク間を移動するときに時間がジャンプすることがあります
  3. タブレットの電源を最初にオンにしたときに、デバイスの時刻が1970に設定されることがあります

私は現在使用されていないサーバー時間を取得するためのWebサービスを持っています。これは、作業の性質上、通常はまったく接続されていないため、インターネットに接続しているユーザーに依存できないためです。ただし、通常は毎日、または少なくとも数日に1回はデータを同期します。

サーバーの時間を取得し、それ以降の時間をカウントするものを作成したいと思います。アプリはこの時間を使用します。接続するたびに、時刻が同期されていることを確認するために、この時刻が更新されます。これを行うための最良の方法について誰かが何か提案がありますか?私たちが送る時間は非常に重要であることに注意してください。何度か誤って報告された場合、誰かが職を失う可能性があります。

前もって感謝します!

4

3 に答える 3

1

Androidには3種類のタイマーがあります... SystemClock

それらの1つ、uptimeMillis()はあなたに役立ちます

アプリが起動したら、現在のuptimeMillisを保存します...アプリが終了したら..「uptimeMillis()-oldUpTimeMillisThatWasStored」との違いを取得できます...

Androidは、時間またはタイムゾーンが変更されたときにブロードキャストを送信します...マニフェストファイルからこれらの変更をキャッチするブロードキャストレシーバーがある場合...(アプリが実行されていない場合でも)時間が変更されたときにわかります..

ACTION_TIME_CHANGED

于 2012-07-13T13:47:09.080 に答える
0

私はこれを未完成のままにしましたが、今は解決策を実装しています。

バックグラウンドで実行され、Webサービスから間隔を置いて日付をダウンロードし、タイマーを使用してWebサービスへの呼び出し間の時間をインクリメントするサービスを作成しました。

これに加えて、私はGPSを使用して現在の時刻と日付を取得し、可能であればこれを使用し、そうでない場合はこの内部時計を使用します。

理論的には、ほとんどの場合、時間は正しいはずです。

于 2012-12-07T16:02:35.303 に答える
0

永続的なインターネット接続が必要です。それ以外の場合は、すでに述べたように変更できるクライアント時間に依存する必要があります。変更を追跡できる場合がありますが、アプリが実行されている場合に限りSettings -> Apps、時刻を変更する前にアプリ()を無効にすることで簡単に偽造できます。

シナリオ:

  • ユーザーがタスクを完了し、クライアントの時間が保存されます
  • ユーザーが時間を変更する
  • デバイスはインターネットを取得してサーバーと同期し、サーバーがタスクの「実際の」完了時間を計算できるように、現在の時刻とタスクを通知します。<-エラー
于 2012-07-13T13:48:53.530 に答える