【问题标题】:Android AlarmManager firing at random timesAndroid AlarmManager 随机触发
【发布时间】:2014-11-03 21:29:21
【问题描述】:

我正在开发一个应用程序,它必须显示一些通知,并且必须每天两次下载一些数据,所以我创建了一个服务来启动我的通知和一个 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

【问题讨论】:

    标签: java android alarmmanager


    【解决方案1】:

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

    请注意,如果您仍然想这样做,您可以调用而不是取消先前的警报:

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

    还请记住,重新启动设备会清除您可能设置的所有警报。因此,您可能需要创建一个 BroadcastReceiver 来监听 android.intent.action.BOOT_COMPLETED 操作,以便设置您的重复警报。

    【讨论】:

    • 首先感谢您的回答。我仍在测试,但这似乎对我有用。
    • 不,8:12 收到通知,8:43 收到通知
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多