如果我的应用程序没有运行,AlarmManager会工作吗?

时间:2013-11-07 04:47:41

标签: android calendar alarmmanager android-pendingintent

如果我正在与我的应用程序进行交互(使用),我会发出警报,但如果我将其设置为第二天并且不与我的应用程序进行交互,则它无法正常工作。因此我怀疑这是因为我的申请流程当时没有运行。

这就是我正在做的事情

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 个答案:

答案 0 :(得分:14)

来自AlarmManager

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


以简单的方式,它将一直有效,直到您的设备重新启动。

您可以阅读Android AlarmManager after reboot,其中@CommonsWare已获得其示例应用程序的链接,该应用程序即使在设备重启后仍会保持警报。


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

您可以在How to create a persistent AlarmManager了解有关应用程序终止的更多信息,而How to save Alarm after app killing?可以让您了解如何处理此类问题(如果应用程序已被终止则持续发出警报)

答案 1 :(得分:3)

是的,它有效但正确的理解见文档。

注意:警报管理器适用于您希望在特定时间运行应用程序代码的情况,即使您的应用程序当前未运行也是如此。对于正常的计时操作(刻度,超时等),使用Handler更容易,也更有效。

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

答案 2 :(得分: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会清除设备重启时的所有警报。

答案 3 :(得分:2)

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

在Vivo v5中,我们可以在

中找到此菜单
iManager > App Manager > Auto Start Manager > Enable our app here. 

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