我非常需要你帮助捕获日期操作。请注意,当您阅读所有提到的时间戳时,表格系统时间而非互联网时间加上我不允许以任何方式使用互联网时间。
基本上我有两个时间戳(包括日期),一个是当前系统时间,第二个是从时间戳数据库获取的日期,时间戳数据库是文件的下载时间戳。此外,我的应用程序每30天需要下载此文件
所以例如: 来自DB的TIMESTAMP或上次下载日期:25/02/2012 当前日期:15/03/2012 下一个下载日期将于:27/03/2012。
我的挑战是我希望在这30天的窗口内停止/捕获日期的操作,所以让我们说用户意识到应用程序将在27/03/2012更新他进入他/她的日期和时间设置保持倒带的时间,以便永远不会让日期到达27/03/2012,例如,将2012年3月15日至2012年3月3日的当前日期倒退,这意味着他“重新回到了12天”。
有任何想法/建议吗?
任何帮助都得到了赞赏!!!
Hi 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();
}
}
}
这是我的BroadCast接收器:
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);
}
}
谢谢!!!!
答案 0 :(得分:0)
您可能想要android.intent.action.DATE_CHANGED
监控android.intent.action.TIME_SET
和BroadcastReceiver,但在玩了一下之后,我不会依赖它们 - 如果您的应用是例如,移动到SD卡后,它将不会在启动后立即接收任何事件,直到安装SD卡。
通过AlarmManager
运行计时器(例如每小时)并且IntentService
与当前系统时间匹配预期时间会更安全,特别是如果您只需要知道是否它发生了。但是,我不会唤醒设备,因为您需要知道的是设备没有睡觉时是否将时间设置为过去。
如果您发现系统时间大于预期的安全时间。
只是我自发的想法。