我有一个应用程序,有时会在闹钟状态栏上收到通知。 问题是,当时间满足时,他运行得很完美,但在此之后,警报会在某些时段启动,例如5分钟,1小时。
然后我把一个(如果)解决问题,但他们从未见过。
long current_time = System.currentTimeMillis();
if (current_time == limit_time)
这是完整的代码。
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
calendar.set(Calendar.HOUR_OF_DAY,11);
calendar.set(Calendar.MINUTE,27);
calendar.set(Calendar.SECOND,0);
long current_time = System.currentTimeMillis();
long limit_time = calendar.getTimeInMillis();
if (current_time == limit_time){
Intent myIntent = new Intent(MainActivity.this, MyReceiver.class);
pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, myIntent, 0);
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent);
}
答案 0 :(得分:2)
我不确定我明白你在问什么,但是
Calendar calendar = Calendar.getInstance();
将Calendar
实例初始化为当前日期和时间,精确度为毫秒。
当您在日历上设置某些字段时,其他字段保持不变。因此,如果毫秒标记中的最后3位数有问题,请将它们设置为零:
calendar.set(Calendar.MILLISECOND, 0);
对于毫秒时间戳的比较,使用>=
或<=
而不是==
通常更有用。
答案 1 :(得分:1)
当然每次都不一样,这就是重点,当你以毫秒为单位计算它不是同一时间现在和现在
更改您的代码并使用&lt;或者&gt;取决于你的需要,而不是==因为计算机可能会跳过检查你正在寻找的值,因为它会快速,因此它可能会从1388395620883变为1388395620892,它实际上没有跳过,但它没有时间打印或检查(或其他)所有。
尝试在无限循环中打印此System.currentTimeMillis()
以查看它是如何进行的,您将看到它无法“快速打印”
答案 2 :(得分:0)