试图将变量传递给 BroadcastReceiver 类,但它只发生一次

在进入问题之前,让我解释一下我在做什么。


最终,我想在每周的某些日子发送不同的通知。我已经能够通过一个通知来让它工作。当我尝试设置多个通知时会出现问题。


所以在我的 MainController 的 OnCreate 方法中,我正在调用一个名为 setAlarm 的函数并传递变量:


setAlarm(this, 3, 14, 04, 1, 1);

其中“this”是上下文,3 是一周中的某一天,14 是一小时,04 是一分钟,1 是一秒,最后 1 是我所说的通知 ID。这是 setAlarm 函数:


public void setAlarm(Context context2, int dayofweek, int hourofday, int dayminute, int daysecond, int notiID){


        Intent alarmIntent = new Intent(this, AlarmReceiver.class);

        alarmIntent.putExtra("VALUE", notiID);


        PendingIntent pendingIntent = PendingIntent.getBroadcast(context2, 0, alarmIntent, 0);


        AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);


        Calendar calendar = Calendar.getInstance();

        calendar.setTimeInMillis(System.currentTimeMillis());

        calendar.set(Calendar.DAY_OF_WEEK, dayofweek);

        calendar.set(Calendar.HOUR_OF_DAY, hourofday);

        calendar.set(Calendar.MINUTE, dayminute);

        calendar.set(Calendar.SECOND, daysecond);

        Date date = calendar.getTime();



        //manager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 0, pendingIntent);

        manager.setExact(AlarmManager.RTC_WAKEUP, date.getTime(),pendingIntent);


    }

我在此功能中所做的是设置警报管理器以在一周中的某一天、某个时间触发。我知道一旦触发它就会调用我设置的 AlarmReceiver 类。但我也通过我设置的 alarmIntent 意图将整数变量传递给 AlarmReceiver 类。


如您所见,我将 int 变量 Value 传递给类,只要我只调用一次 setAlarm 函数,它就可以正常工作。但我正试图让这个工作来设置多个通知。我期望发生的是,我使用通知 ID (notiID) 调用 setAlarm 函数,并在指定的时间触发警报管理器,并将额外的变量值与执行流程一起传递给 alarmReceiver 类。在 Alarm Receiver 类中,我设置了一个 if 语句来测试变量“值”以查看它是 1 还是 2,并基于此,将触发并显示在手机上的通知。


发生的事情是当我两次调用 setAlarm 函数时,从未收到第一个通知。更奇怪的是,收到了第二个通知,但它的变量“值”是 1,而不是我期望的 2。


例如:所以我调用 setAlarm 并将闹钟设置为在周二 12:05:01 响起,并通过 notiID 为 1。然后我再次调用 setAlarm 并将闹钟设置为在周二 12:06:01 响起,并传递 2 的 notiID。


在 12:05:01,什么也没有发生。我应该看到第一个通知,但我没有。在 12:06:01 我收到一条通知,但我看到的是第一个通知,而不是第二个通知。同样,如果我在 AlarmReceiver 类中放置一个断点并查看“值”设置为什么,它会显示设置为 1,而不是 2。


所以我不明白发生了什么。我希望任何有使用 Android 8.0.0 及更高版本制作通知经验的人都可以提供帮助。甚至建议采用不同的方式在不同的日子发送不同的通知。


HUH函数
浏览 132回答 1
1回答

DIEA

更改以下行PendingIntent pendingIntent = PendingIntent.getBroadcast(context2, 0, alarmIntent, 0);至    PendingIntent pendingIntent = PendingIntent.getBroadcast(context2, notiID, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java