Android AlarmManager随机触发

时间:2014-11-03 21:29:21

标签: java android alarmmanager

我正在开发一个必须显示一些通知并且必须每天下载一些数据的应用程序,所以我创建了一个用于启动我的通知的服务和一个BroadcastReceiver应该(取决于时间)运行我的NotificationService以及之后的DownloadService。 我现在的问题是,我创建的AlarmManager-alarm应该每小时调用一次火警(如果少或多于1或2分钟则不重要),并且它会持续大约3到4个小时,但随后它会随机运行并多次运行例如,在7和8之间。

我不知道问题出在哪里,所以这是我的代码:

活动:

Intent myIntent = new Intent(OverviewActivity.this, Receiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(OverviewActivity.this, 0, myIntent, 0);

AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, notifCal.getTimeInMillis(), AlarmManager.INTERVAL_HOUR, pendingIntent);

接收器:

public class Receiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent arg1) {
        Intent notificationService = new Intent(context, NotificationService.class);
        context.startService(notificationService);<br/>
    }

}

提前致谢, momob114

1 个答案:

答案 0 :(得分:1)

每次激活您的活动时,您的应用都会取消并重新创建警报,这可能是看似随机调用的原因(实际上可能与您打开应用的时间相对应,或者一小时后)。

请注意,如果您仍想这样做,而不是取消之前的闹钟,您只需致电:

PendingIntent pendingIntent = PendingIntent.getBroadcast(OverviewActivity.this, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);

请记住,重启设备将清除您可能设置的任何警报。因此,您可能希望创建一个侦听android.intent.action.BOOT_COMPLETED操作的BroadcastReceiver,以便设置重复警报。