gpt4 book ai didi

java - 尝试将变量传递给 BroadcastReceiver 类,但只发生一次

转载 作者:行者123 更新时间:2023-12-02 10:58:47 24 4
gpt4 key购买 nike

在讨论这个问题之前,让我先解释一下我在做什么。

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

因此,在 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 类。

警报管理器工作,并在指定时间触发。这是我设置的 AlarmReceiver 类:

public class AlarmReceiver extends BroadcastReceiver {

private static AlarmReceiver instance = null;

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

int value = intent.getIntExtra("VALUE", 0);

if (value == 1){
NotificationCompat.Builder noti = new NotificationCompat.Builder(context, "notify_001");

noti.setSmallIcon(R.drawable.clocknoon);
noti.setContentTitle("Bill Sez...");
noti.setContentText("First Notification Test!!!");
noti.setPriority(NotificationCompat.PRIORITY_DEFAULT);

NotificationManager nm = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
NotificationChannel channel = new NotificationChannel("notify_001", "Channel title", NotificationManager.IMPORTANCE_DEFAULT);
nm.createNotificationChannel(channel);
}

nm.notify(0, noti.build());
}

if (value == 2){
NotificationCompat.Builder noti = new NotificationCompat.Builder(context, "notify_002");

noti.setSmallIcon(R.drawable.clocknoon);
noti.setContentTitle("Bill Sez...");
noti.setContentText("This is the second notification test");
noti.setPriority(NotificationCompat.PRIORITY_DEFAULT);

NotificationManager nm = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
NotificationChannel channel = new NotificationChannel("notify_002", "Channel title", NotificationManager.IMPORTANCE_DEFAULT);
nm.createNotificationChannel(channel);
}

nm.notify(0, noti.build());
}


}
}

正如您所看到的,我将 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响,并传递notiID共 2 个。

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

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

最佳答案

更改以下行

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

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

关于java - 尝试将变量传递给 BroadcastReceiver 类,但只发生一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51507082/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com