1

私の Android アプリケーションには、1 日に 1 回更新する必要があるものがあります。

とても簡単だと思いますが、日付と時刻をフォーマットする必要がある形式 (時間が必要な場合) と、今日更新が行われたかどうかを確認する方法 (今日は午前 00:01 から 23 の間:ユーザーの現地時間で午後 59 時)。今日の更新がすでに行われている場合は、更新を行うべきではありません。

これが私が行う方法を知っていることです:

  • 最終更新日を SharedPreferences に保存します (ただし、その文字列を取得するにはどうすればよいかわかりません)
  • SharedPreferences から取得します (ただし、日付を文字列形式で比較する方法がわかりません)
4

5 に答える 5

9

どの形式を選択するかは問題ではありません。再計算の問題です。

すべてのシステムコールが使用するため、エポックからミリ秒を使用することをお勧めします。同じものを使用する方が簡単です。

1000 ミリ秒は 1 秒なので1000*60*60*24、1 日 (24 時間) に相当することは簡単にわかります。したがって、storedMillisが よりも大きいNOW - 1000*60*60*24(かつNOWie であるSystem.currentTimeMillis()) 場合、チェックを行うには時期尚早です。storedMillisより小さい場合は、NOWタイムスタンプを保存してチェックを行います。

long now = System.currentTimeMillis();
long diffMillis = now - lastCheckedMillis;
if( diffMillis >= (3600000  * 24) ) {
  // store now (i.e. in shared prefs)

  // do the check
} else {
   // too early
}

編集

最後の更新が10分前に行われたとしても、当日のアプリが最初に開かれたときにそれを行うことに興味があります.

比較する適切なミリ秒を取得する方法が問題です。long now = System.currentTimeMillis();上記のコードを次のコード ブロックに置き換えます。

Calendar cal = Calendar.getInstance();
cal.clear(Calendar.HOUR);
cal.clear(Calendar.HOUR_OF_DAY);
cal.clear(Calendar.MINUTE);
cal.clear(Calendar.SECOND);
cal.clear(Calendar.MILLISECOND);

long now = cal.getTimeInMillis();

これでうまくいきます。

于 2012-11-22T14:44:13.773 に答える
2

日付を 20121122 (YYYYmmdd) の形式で保存すると、20121122 > 20121123 のように比較できます。ただし、比較するときは int として保存するか、int にキャストする必要があります。

于 2012-11-22T14:40:24.053 に答える
1

最後の実行のタイムスタンプ (System.currentTimeMillis() ) を保存し、現在のものと比較します。差が 24 時間以上ある場合... ご存知ですか?

于 2012-11-22T14:42:41.423 に答える
1

24 時間ごとに実行される AlarmManager を使用してアラームを設定し、次の処理を行います

この質問を確認してください:アラーム マネージャーの例

これは他の方法よりも複雑なアプローチですが、すべてが完了していることを確認しますが、他のオプションでは、何かを更新する必要があるかどうかを確認するためにアプリを実行する必要があります。

于 2012-11-22T14:45:30.103 に答える