素晴らしい解決策はこれにありません(インターネット 接続が必要)ネットワーク時間を取得します。いくつかのオプションがありますが、どちらも完璧ではありません。
オプション1 - 使用日付/時刻最後の既知の場所から
これは、アプリはトラッキングのための有効な必要性を持っていない場合、ユーザーに関係する可能性がある、アプリケーションでGPSへのアクセスを要求するためにあなたを必要としますユーザーの場所。しかし、基本的に最後の既知の位置を取得し、Location
のオブジェクトは、最後の位置チェックの時点で返されます。 2つのことは、これが100%動作するのを防ぐことができます。まず、Androidの新しいバージョンでは、ユーザーは特定のアプリの権限を無効にすることができます。つまり、アプリにGPSアクセスを許可しない可能性があります。これに対処するには、アプリの起動時にこれを確認し、GPSアクセスが有効になっていない限り、ユーザーがコンテンツにアクセスできないことを知らせることができます。第2に、ユーザにGPS信号がない場合、最後の既知の位置は数日前であった可能性があり、これは「現在の時刻」が最後のGPS信号の時点で固定されることを意味する。また、一部のデバイスにはGPSチップが搭載されていないため、このデバイスでは機能しません。
オプション2 - アプリに日付/時刻のログを記録して、システムの日付/時刻の変更を検出しようとします。
基本的に、これは、アプリの各セッションの期間と同様に、各起動時にシステムの日付/時間を追跡するためにいくつかの作業が必要になります。このログを使用すると、現在/日付の時刻と比較して、ユーザーが時計をロールバックしているかどうかを確認できます。あなたの小切手を理解していた賢いユーザーが、最後にアプリをシャットダウンしたときに最も近い時間にロールバックすることができたとしても、これは完璧ではありませんでしたが、少なくともこれにより、実行時間。また、あなたの小切手の追跡/悪用を本当に献身する人が必要になります。ほとんどのユーザーは単に時計を過去の日付にロールバックしようとしますが、それは簡単に捕らえることができます。この方法では、UTC時間ですべての時刻をキャプチャ/保存していることを確認してください。時間の変更によって誤った詐欺のシナリオが発生することはありません。個人的に
勧告
アプリのGPSの権限でOKであれば、私は両方のオプションを使用します。利用可能で、ユーザーの許可があれば、最後の既知の場所を使用して時刻を取得します。それが利用できない場合、またはユーザーが権限を削除した場合は、実行日時と期間のローカルストアをフォールバックとして使用します。
開発者が自分のアプリでGPSの特権を要求していない場合は、最後の既知の場所がオプションになると思います。ネットワーク時間は、ユーザがオフラインになったときにもこれを動作させたいので、質問の基準を満たしていないようです。 – wottle