通过广播接收器重启android后,多个警报被触发

时间:2017-09-03 06:25:42

标签: android android-intent notifications broadcastreceiver android-alarms

我正在制作一个通知应用程序,为此我使用预定的警报来使用广播接收器类运行通知,我提示用户从每日或每小时的通知中选择,我在相同的接收器中定义两个警报功能,它工作正常,但问题来了,当我重新启动我的设备,当我重新启动时,警报(每日和每小时)被触发,当我只设置一个例如,如果我设置警报为上午11点20分和每小时重新启动我的设备一次,这一次是11:20一个都被触发,我希望当我重新启动设备时,只有在设备启动之前选择的警报才会被触发。

我的接收器类: -

public class alarmreceiver extends BroadcastReceiver {
    int id=0;

    @Override
    public void onReceive(Context context, Intent intent) {

        Toast.makeText(context, "Alarm running", Toast.LENGTH_SHORT).show();

        start(context,id);

    }
    static void start(Context context,int id) {
        Intent intent = new Intent(context, notification_receiver.class);
        PendingIntent pendingintent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        if (id==1) {

            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.HOUR, 11);
            calendar.set(Calendar.MINUTE, 9);
            calendar.set(Calendar.AM_PM, Calendar.AM);
            alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingintent);
        }
            else

            if (id==2) {

                alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                        SystemClock.elapsedRealtime(), 60 * 1000
                        , pendingintent);
            }
        }

我在按钮点击监听器下调用此功能,如下所示: - 对于每日通知: -

alarmreceiver.start(getApplicationContext(),1);

每小时通知: -

alarmreceiver.start(getApplicationContext(),2);

1 个答案:

答案 0 :(得分:0)

此代码:

alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                    SystemClock.elapsedRealtime(), 60 * 1000, pendingintent);

设置一个每分钟都会响起的重复闹钟,而不是每小时!

此外,此代码设置的警报每分钟都会立即响起。 setRepeating()的第二个参数是第一次报警的时间。您已通过SystemClock.elapsedRealtime(),这基本上意味着"现在"。