0

在捕获日期操作方面,我需要您的帮助。请注意,当您阅读所有提到的时间戳时,都是系统时间,而不是互联网时间,而且我不允许以任何方式使用互联网时间。

基本上我有两个时间戳(包括日期),一个是当前系统时间,第二个是从时间戳数据库中获取的日期,它是文件的下载时间戳。此外,我的应用程序需要每 30 天下载一次此文件

例如:来自数据库的时间戳或上次下载日期:25/02/2012 当前日期:15/03/2012 下一个下载日期将在:27/03/2012。

我的挑战是我想在这 30 天的窗口内停止/捕获对日期的操作,所以假设用户意识到应用程序将在 2012 年 3 月 27 日更新,他进入他/她的日期和时间设置并不断倒带时间是为了永远不允许日期从 2012 年 3 月 27 日开始,例如将当前日期(2012 年 3 月 15 日)倒回到 2012 年 3 月 3 日,这意味着他“回到了 12 天”。

有什么想法/建议吗?

任何帮助表示赞赏!

嗨 Class Stacker,下面是我创建计时器的尝试,但我有点不确定按照您的建议放置支票的位置。我已经将伪代码放在我认为应该在计时器中运行检查的地方。

这是我的 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

您可能想通过BroadcastReceiverandroid.intent.action.DATE_CHANGED进行监控,但是在玩了一会儿之后,我不会依赖它们——如果您的应用程序被移动到 SD 卡,它不会在启动后立即接收任何事件,直到例如,安装了 SD 卡。android.intent.action.TIME_SET

通过运行计时器(例如每小时)AlarmManager并将IntentService预期时间与当前系统时间相匹配会更安全,特别是如果您只需要知道它是否发生。不过,我不会唤醒设备,因为您只需要知道在设备未休眠时时间是否设置为过去。

如果您发现系统时间大于预期时间,那是安全的。

只是我自发的想法。

于 2013-03-06T13:34:39.647 回答