11

如果我正在与我的应用程序交互(使用),我有一个可以正常工作的警报,但如果我将它设置为第二天而不与我的应用程序交互,它就不起作用。因此我怀疑这是因为我的应用程序进程没有运行当时。

这就是我正在做的

Calendar calSet = Calendar.getInstance();
calSet.set(Calendar.HOUR_OF_DAY, selectedhour);
calSet.set(Calendar.MINUTE, selectedminute);
calSet.set(Calendar.YEAR, year);
calSet.set(Calendar.MONTH, monthOfYear);
calSet.set(Calendar.DATE, dayOfMonth);
alarm = new Intent(ActivityA.this, Service.class);
pendingIntent = PendingIntent.getService(getApplicationContext(), i++,alarm, 1);
alarmanager.set(AlarmManager.RTC_WAKEUP, calSet.getTimeInMillis(),pendingIntent);
4

4 回答 4

15

警报管理器

AlarmManager 提供对系统警报服务的访问。这些允许您安排您的应用程序在将来的某个时间点运行。当警报响起时,系统会广播已为其注册的 Intent,如果目标应用程序尚未运行,则会自动启动它。注册的闹钟在设备处于睡眠状态时会保留(并且可以选择在此期间唤醒设备,如果它们在此期间关闭),但如果它被关闭并重新启动,则会被清除。


简单来说,它会一直工作,直到您的设备重新启动。

您可以在重新启动后阅读 Android AlarmManager,其中@CommonsWare 已获得他的示例应用程序的链接,即使在设备重新启动后仍然存在警报。


请忽略以下部分,它似乎无效。我将来会删除

您可以在How to create an persistent AlarmManager以及如何在应用程序终止后保存警报?可以为您提供有关如何处理此类问题的想法(如果应用程序已被终止,则持续发出警报)

于 2013-11-07T04:50:41.513 回答
3

是的,它有效,但正确理解请参阅文档。

注意:警报管理器适用于您希望应用程序代码在特定时间运行的情况,即使您的应用程序当前没有运行。对于正常的计时操作(滴答声、超时等),使用 Handler 更容易、更高效。

见这里http://developer.android.com/reference/android/app/AlarmManager.html

于 2013-11-07T04:51:45.097 回答
3

查看 AlarmManager 文档..

http://developer.android.com/reference/android/app/AlarmManager.html

我看不到任何地方表明杀死您的应用程序将删除该应用程序已安排的所有警报。更具体地说,它说明如果您的应用程序未启动,它将为您启动它。

我已经完成了自己的测试,并且可以通过..验证这一点

  • 在未来 5 秒内设置警报。
  • 然后从最近关闭应用程序。
  • 然后观看日志以接收我的广播。
  • 请记住,这是使用签名的 apk 完成的。

    Calendar cal = Calendar.getInstance();
    cal.add(Calendar.MILLISECOND, 5000);
    
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);
    

我还要记住 Pankaj Kumar 所说的关于启动时重新启动警报的内容。这是您需要覆盖自己的一个地方,因为 AlarmManager 确实会在设备重启时清除所有警报。

于 2017-03-15T00:28:41.507 回答
2

我们需要在应用程序管理器的自动启动管理器中启用我们的应用程序,一些手机,如 Vivo v5,

在 Vivo v5 中,我们可以在

iManager > App Manager > Auto Start Manager > Enable our app here. 

然后,如果应用程序被杀死或关闭,您的警报/警报管理器将触发警报。

于 2017-02-26T12:57:42.650 回答