0

日付操作のキャプチャについてご協力をお願いします。記載されているすべてのタイムスタンプはシステム時間であり、インターネット時間ではありません。また、インターネット時間を使用することは一切許可されていません。

基本的に、2 つのタイムスタンプ (日付を含む) があります。1 つは現在のシステム時刻で、もう 1 つはファイルのダウンロード タイムスタンプであるタイムスタンプ データベースから取得された日付です。さらに、私のアプリは 30 日ごとにこのファイルをダウンロードする必要があります

例: TIMESTAMP FROM DB OR LAST DOWNLOAD DATE: 25/02/2012 CURRENT DATE: 15/03/2012 NEXT DOWNLOAD DATE は 27/03/2012 になります。

私の課題は、この 30 日間のウィンドウ内で日付の操作を停止/キャプチャすることです。そのため、ユーザーがアプリが 2012 年 3 月 27 日に更新されることに気付いたとします。ユーザーは日付と時刻の設定に入り、日付を巻き戻し続けます。日付が 2012 年 3 月 27 日になることを決して許さないようにするための時間です。つまり、現在の日付である 2012 年 3 月 15 日を 2012 年 3 月 3 日に巻き戻して、「12 日前に戻った」ことを意味します。

アイデア/提案はありますか?

どんな援助も感謝します!!!

こんにちはクラススタッカー、以下はタイマーを作成しようとする私の試みですが、あなたが提案したようにチェックをどこに置くべきか少しわかりません. タイマーでチェックを実行する必要があると思われる場所に疑似コードを配置しました。

ここに私の AlarmManagerActivity があります:

public class AlarmManagerActivity extends Activity {

 private AlarmManagerBroadcastReceiver alarm;
 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        alarm = new AlarmManagerBroadcastReceiver();
    }

    @Override
 protected void onStart() {
  super.onStart();
 }

public void startRepeatingTimer(View view) {
     Context context = this.getApplicationContext();
     if(alarm != null){
      alarm.SetAlarm(context);
     }else{
      Toast.makeText(context, "Alarm is null", Toast.LENGTH_SHORT).show();
     }
 }
 }

そして、これが私のブロードキャストレシーバーです:

public class AlarmManagerBroadcastReceiver extends BroadcastReceiver {

 final public static String ONE_TIME = "onetime";

 @Override
 public void onReceive(Context context, Intent intent) {
     PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
     PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "AlarmManagerBroadcastReceiver");
     //Acquire the lock
     wl.acquire();

     //You can do the processing here.
     Bundle extras = intent.getExtras();
     StringBuilder msgStr = new StringBuilder();

     if(extras != null && extras.getBoolean(ONE_TIME, Boolean.FALSE)){
      //Make sure this intent has been sent by the one-time timer button.
      msgStr.append("One time Timer : ");
     }
     Format formatter = new SimpleDateFormat("hh:mm:ss a");
     msgStr.append(formatter.format(new Date()));

     Toast.makeText(context, msgStr, Toast.LENGTH_LONG).show();

     // SHOULD THE CODE TO CHECK SYSTEM TIME AGAINST THE CORRECT TIME BE PLACED HERE ??
     // CURRENTLY I'M DISPLAYING A TOAST
     // THANKS FOR ANY HELP

     //Release the lock
     wl.release();
}

public void SetAlarm(Context context)
{
    AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
    intent.putExtra(ONE_TIME, Boolean.FALSE);
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
    //After after EVERY HR
    am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 30 , pi);
}

}

ありがとう !!!!

4

1 に答える 1

0

BroadcastReceiverで監視android.intent.action.DATE_CHANGEDしたいかもしれませんが、少し遊んだ後、私はそれらに依存しません。アプリがSDカードに移動された場合、起動直後までイベントを受信しません。たとえば、SDカードがマウントされています。android.intent.action.TIME_SET

タイマー (例: 1 時間ごと) を実行し、現在のシステム時間に対して予想される時間を一致させると、特にそれが起こったかどうかだけを知る必要がある場合は、より安全にAlarmManagerなりますただし、知る必要があるのは、デバイスがスリープしていないときに時間が過去に設定されていたかどうかだけであるため、デバイスをウェイクアップしません。IntentService

システム時間が予想よりも大きい場合は、安全です。

ただの私の自発的な考えです。

于 2013-03-06T13:34:39.647 に答える