我编写了一个小应用程序,它使用AlarmManager调用一个服务,间隔为一天。为了测试这个应用程序,我使用模拟器5.1。手动设置日期和时间(当前日期或未来日期时间)时,AlarmManager会调用当天的服务。当我试图通过更改日期来更改日期以检查它是否会在其他日子工作时,它不会调用服务。
这是我的代码。
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(calendar.HOUR_OF_DAY,13);
calendar.set(calendar.MINUTE,20);
calendar.set(Calendar.SECOND,10);
alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this,BackgroundService.class);
pendingIntent = PendingIntent.getService(this, 0, intent, 0);
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),AlarmManager.INTERVAL_DAY,pendingIntent);
Toast.makeText(this, "Alarm Set", Toast.LENGTH_SHORT).show();
BackgroundService是一个弹出Toast的服务。
我有两个问题。
- 如何测试我们以一天为间隔设置的AlarmManager ?
- 告警管理器没有在第二次调用。例如,我将闹钟设置在13:20:10,但它在13:20到来:一些随机秒
非常感谢你的帮助。
谢谢。
- RTC(实时时钟)是你可以调整的时钟,所以你可能只是为一个测试用例编程地改变当前时间。请看这个答案
- 您使用的是
alarmManager.setInexactRepeating
方法,不能保证警报传递的确切时间。要获得更精确的计时,请使用alarmManager.setRepeating
,但请记住,不建议这样做,因为大多数用例不需要精确的计时,并且会导致更高的电池使用量。参见inexacating and repeat