Android AlarmManager&通知

时间:2015-08-10 10:28:33

标签: android notifications alarmmanager

我需要AlarmManager每天在同一时间发送通知。当我第一次加载应用程序时,它按预期工作。不幸的是,在重新启动手机后,当时没有任何通知。如果我打开应用程序,通知会显示。我需要的是提醒用户在他们不在的时候使用该应用程序。如果他们必须进入应用程序才能工作,那就毫无价值。

以下是我的一些代码:

AlarmManager am = getAlarmManager(ctx);
Intent i = new Intent(ctx, UpdateReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(ctx, 0, i, 0);
Calendar cal = Calendar.getInstance();
cal.setTime(new Date(System.currentTimeMillis()));
//If current time is later than 22, the alarm time should set 22 in the next day
if (cal.get(Calendar.HOUR_OF_DAY)>22)
{
    cal.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH)+1);
}
cal.set(Calendar.HOUR_OF_DAY, 22);
cal.set(Calendar.MINUTE, 0);
am.setRepeating(AlarmManager.RTC_WAKEUP ,cal.getTimeInMillis(), 24 * 60 * 60 * 1000, pendingIntent);

如何让应用始终正确发送通知?

2 个答案:

答案 0 :(得分:1)

不幸的是,当您重新启动设备时,所有AlarmManager内容都将被清除。

  

...如果关闭并重新启动,将被清除。

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

您必须为此引导注册BroadcastReceiver

<receiver android:name="com.your.app.BootCompletedReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>

从您的接收器中,您必须再次安排通知(就像您在帖子中一样)。

答案 1 :(得分:0)

显然,我认为我的代码是正确的。所以我将应用程序移动到AVD,它可以工作。我的测试手机不是原装Android操作系统,我猜ROM已经改变了AlarmManager的工作方式。