Java Android AlarmManager在随机时间触发

Java Android AlarmManager在随机时间触发,java,android,alarmmanager,Java,Android,Alarmmanager,我正在开发一个应用程序,它必须显示一些通知,并且必须每天下载两次数据,因此我创建了一个用于启动我的通知的服务和一个BroadcastReceiver,它应该(取决于时间)运行我的NotificationService,然后运行我的下载服务。 我现在的问题是,我创建的AlarmManager警报应该每小时调用一次fire(如果少于或超过1或2分钟,则不重要),它会这样做大约3到4个小时,但随后它会随机运行,也会在7到8点之间多次运行 我不知道问题出在哪里,所以下面是我的代码: 活动: Intent

我正在开发一个应用程序,它必须显示一些通知,并且必须每天下载两次数据,因此我创建了一个用于启动我的通知的服务和一个
BroadcastReceiver
,它应该(取决于时间)运行我的
NotificationService
,然后运行我的
下载服务。
我现在的问题是,我创建的AlarmManager警报应该每小时调用一次fire(如果少于或超过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/>
    }

}
接收器:

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/>
    }

}
公共类接收器扩展了BroadcastReceiver{
@凌驾
公共void onReceive(上下文,意图arg1){
意向notificationService=新意向(上下文,notificationService.class);
context.startService(通知服务);
} }
提前感谢,,
momob114

每次启动您的活动时,您的应用程序都会取消并重新创建警报,这可能是看似随机呼叫的原因(实际上可能对应于您打开应用程序的时间,或一小时后)

注意:如果您仍然想这样做,您可以拨打以下电话,而不是取消先前的报警:

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

请记住,重新启动设备将清除您可能设置的任何警报。因此,您可能需要创建一个广播接收器,监听android.intent.action.BOOT_完成的操作,以便设置重复警报。

首先感谢您的回答。我还在测试,但这对我来说似乎很有效。不,8点12分刚收到通知,8点43分收到通知