如何测试为INTERVAL_DAY设置的Alarm Manager

时间:2015-09-26 17:05:40

标签: android alarmmanager android-alarms

我编写了一个小应用程序,它使用当天间隔的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弹出的服务。

我有2个问题。

  1. 如何测试AlarmManager,我们设置了一天的间隔时间?
  2. 警报管理器并非在第二次调用。例如,我将警报设置为13:20:10,但是它将在13:20发出:一些随机的第二个
  3. 非常感谢您的帮助。

    谢谢。

1 个答案:

答案 0 :(得分:0)

  1. RTC(实时时钟)是您可以调整的时钟,因此您可能只是以编程方式更改测试用例的当前时间。请参阅this answer
  2. 您使用的是alarmManager.setInexactRepeating方法,但不保证报警发送的确切时间。要获得更精确的时序,请使用alarmManager.setRepeating,但请记住,这并不是真正推荐的,因为大多数用例不需要精确的时序,并且会导致更高的电池使用量。请参阅inexactRepeatingrepeating