【问题标题】:Multiple alarms are getting fired after reboot in android through broadcast receiver通过广播接收器在android中重新启动后会触发多个警报
【发布时间】:2017-09-03 06:25:42
【问题描述】:

我正在制作一个通知应用程序,为此我正在使用预定的警报来使用广播接收器类运行通知,并且我正在提示用户从每日或每小时通知中进行选择,并且我在同一个接收器中定义了两个警报功能,它工作正常,但是当我重新启动我的设备时问题就来了重新启动我的设备,每小时一次和这个 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);

【问题讨论】:

  • 发布设备启动时运行的代码

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


【解决方案1】:

这段代码:

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

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

此外,此代码设置了一个警报,该警报每分钟一次又一次地响起。 setRepeating() 的第二个参数是第一次报警的时间。你已经通过了SystemClock.elapsedRealtime() 这基本上意味着“现在”。

【讨论】:

  • 感谢您的回复,但您的这并没有回答我的问题我的主要问题是当我在 onreceive 函数中调用该函数时,当我的设备重新启动时它不接受警报 ID 的值。所以当我重新启动我的设备,我的警报没有触发,但如果我不重新启动我的设备,它们工作正常,因为它们正在使用从主活动调用的函数。
  • 您从onReceive() 调用start(),但id 的值为0。
  • 是的,我改变了它,我只是想检查它是否有任何价值,但如果我留下 id 为空,它就不起作用。
  • 当我将 1 或 2 分配给我的广播接收器中的 id 时,它在重新启动后正在工作,但我需要它应该从主要活动更新广播接收器中的 id 并保持分配它即使我重新启动我的设备.所以用户可以在多个警报之间进行选择。
  • 我是使用 SharedPreference 完成的,我非常感谢你建议我使用 SharedPreference 并帮助我。我希望我能 +rep 你的回答,因为我需要 15 Rep没有,但非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多