为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

HUH函数 2021-06-07 13:24:05
在进入问题之前,让我解释一下我在做什么。最终,我想在每周的某些日子发送不同的通知。我已经能够通过一个通知来让它工作。当我尝试设置多个通知时会出现问题。所以在我的 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 及更高版本制作通知经验的人都可以提供帮助。甚至建议采用不同的方式在不同的日子发送不同的通知。
查看完整描述

1 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

更改以下行

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

    PendingIntent pendingIntent = PendingIntent.getBroadcast(context2, notiID, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);



查看完整回答
反对 回复 2021-06-10
  • 1 回答
  • 0 关注
  • 131 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信