Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android重复警报不工作_Android_Repeat_Alarm - Fatal编程技术网

Android重复警报不工作

Android重复警报不工作,android,repeat,alarm,Android,Repeat,Alarm,这很好: Intent intent = new Intent(HelloAndroid2.this, AlarmReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(HelloAndroid2.this, 0, intent, PendingIntent.FLAG_ONE_SHOT); AlarmManager alarmManager = (AlarmManager) g

这很好:

Intent intent = new Intent(HelloAndroid2.this, AlarmReceiver.class);

    PendingIntent pendingIntent = PendingIntent.getBroadcast(HelloAndroid2.this, 0,
    intent, PendingIntent.FLAG_ONE_SHOT);

    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (12 * 1000), pendingIntent);
这不管用。我只听到闹钟响了一次

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (12 * 1000), 3 * 1000, pendingIntent);
我也试过这个,运气不好:

Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.add(Calendar.SECOND, 5);

    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 7000, pendingIntent);
问题出在哪里?

来自单发标志:

这个吊坠可以 只能使用一次。如果设置,则在 如果对其调用send(),则 自动为您和任何人取消 将来尝试通过它发送将 失败

因此,在第一次启动PendingEvent后,它将被取消,并且下一次通过alarm manager发送它的尝试将失败


尝试使用FLAG_UPDATE_CURRENT

按顺序查看代码示例:

在您的第一个示例中,您使用的是AlarmManager.set-这严格适用于一次性警报,因此是的,它只会触发一次。如果要使用AlarmManager.set,则触发的代码应做的最后一件事是设置新的报警(也应使用新的PendingEvent)

在第二个示例中,您使用的是重复报警。您不需要每次触发时创建一个新的PendingEvent,因为操作系统会处理警报的重复部分

没有理由不让您的警报每3秒重复一次,因此我将开始查看您为处理警报而编写的BroadcastReceiver实现

检查您是否正确地实现了它。注释掉onReceive()方法中的所有代码,让它编写一条日志消息。每次报警触发时,当您看到日志消息出现在logcat中时,将代码添加回(保留日志消息),并在方法末尾添加另一条日志消息。这允许您查看该方法执行所需的时间-您希望它在警报再次触发之前完成,以避免任何意外的副作用


另一方面,如果您想要重复报警,尽管通过AlarmManager设置的报警会非常准确地触发,但android.os.Handler是一种更有效的方法。

这非常简单。非常感谢。