Я пытаюсь запланировать уведомления с использованием службы тревоги и ожидающего намерения, каждый раз, когда пользователь вводит новое задание, он передает ожидающее намерение методу OnRecive диспетчера уведомлений, но проблема, с которой я сталкиваюсь, заключается в том, что пользователь не При планировании нескольких уведомлений показывается последнее запланированное уведомление, которое перезаписывает предыдущие объекты, хотя я передаю новый идентификатор каждому уведомлению.
Вот код, в который пользователь будет добавлять задачу.
import android.app.AlarmManager;
import android.app.DatePickerDialog;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Switch;
import android.widget.TimePicker;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class AddTask extends AppCompatActivity {
int mDay, mMonth, mYear, hourofDay, minutes;
EditText selectDate, selectTime, tastText;
Switch showReminder;
ConstraintLayout remiderLayout;
Button save;
TaskDBHelper taskDBHelper;
ReminderReciver reminderReciver;
boolean activityResult;
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_task);
createNotificationChannel();
final Calendar c = Calendar.getInstance();
mYear = c.get(Calendar.YEAR);
mMonth = c.get(Calendar.MONTH);
mDay = c.get(Calendar.DAY_OF_MONTH);
hourofDay = c.get(Calendar.HOUR_OF_DAY);
minutes = c.get(Calendar.MINUTE);
selectDate = findViewById(R.id.selectDate);
selectDate.setFocusable(false);
selectTime = findViewById(R.id.selectTime);
selectTime.setFocusable(false);
showReminder = findViewById(R.id.reminderSwitch);
remiderLayout = findViewById(R.id.showReminderLayout);
save = findViewById(R.id.AddTaskButton);
tastText = findViewById(R.id.tastTextbox);
showReminder.toggle();
showReminder.setOnCheckedChangeListener((buttonView, isChecked) -> {
if(showReminder.isChecked()){
remiderLayout.setVisibility(View.VISIBLE);
}
else{
remiderLayout.setVisibility(View.INVISIBLE);
}
});
selectDate.setOnClickListener(v -> ShowDatePicker());
selectTime.setOnClickListener(v -> ShowTimePicker());
save.setOnClickListener(v -> {
taskDBHelper = new TaskDBHelper(AddTask.this);
if(showReminder.isChecked()){
activityResult = taskDBHelper.addTask(tastText.getText().toString(),
selectDate.getText().toString(), selectTime.getText().toString());
}
else{
activityResult = taskDBHelper.addNote(tastText.getText().toString(),
selectDate.getText().toString(), selectTime.getText().toString());
}
String itemCount = getIntent().getStringExtra("Itemcount");
Intent notif = new Intent(AddTask.this, ReminderReciver.class);
notif.setAction("com.example.Broadcast");
notif.putExtra("notificationText", tastText.getText().toString());
Log.d("Text", tastText.getText().toString());
notif.putExtra("notificationID", itemCount);
PendingIntent pendingIntent = PendingIntent.getBroadcast(AddTask.this,0,notif,0);
IntentFilter intentFilter = new IntentFilter("com.example.Broadcast");
reminderReciver = new ReminderReciver();
registerReceiver(reminderReciver,intentFilter);
Calendar myAlarmDate = Calendar.getInstance();
myAlarmDate.setTimeInMillis(System.currentTimeMillis());
myAlarmDate.set(mYear, mMonth, mDay, hourofDay, minutes);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP,myAlarmDate.getTimeInMillis(),pendingIntent);
finish();
});
}
@RequiresApi(api = Build.VERSION_CODES.O)
public void createNotificationChannel(){
CharSequence channelName = "Reminders";
String description = "Channel for reminders";
int importance = NotificationManager.IMPORTANCE_DEFAULT;
NotificationChannel channel = new NotificationChannel("Reminders", channelName, importance);
channel.setDescription(description);
NotificationManager notificationManager = getSystemService(NotificationManager.class);
notificationManager.createNotificationChannel(channel);
}
public void ShowDatePicker(){
DatePickerDialog datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
selectDate.setText(dayOfMonth + "-" + (monthOfYear + 1) + "-" + year);
mDay = dayOfMonth;
mMonth = monthOfYear;
mYear = year;
}
}, mYear, mMonth, mDay);
datePickerDialog.show();
}
public void ShowTimePicker(){
TimePickerDialog timePickerDialog = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
selectTime.setText(hourOfDay+" : "+minute);
hourofDay = hourOfDay;
minutes = minute;
}
}, hourofDay, minutes,true);
timePickerDialog.show();
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(reminderReciver);
}
}
Это приемник вещания
package com.birdicomputers.login;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
public class ReminderReciver extends BroadcastReceiver {
private String NotificationTitle;
private String NotificationText;
private String Notification_ID;
public ReminderReciver() {
}
@Override
public void onReceive(Context context, Intent intent) {
NotificationText = intent.getStringExtra("notificationText");
Notification_ID = intent.getStringExtra("notificationID");
Log.d("NotifText", NotificationText);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context, "Reminders")
.setSmallIcon(R.drawable.ic_menu_send)
.setContentTitle("Due Now!")
.setContentText(NotificationText)
.setPriority(NotificationCompat.PRIORITY_DEFAULT);
NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(context);
notificationManagerCompat.notify(Integer.parseInt(Notification_ID), builder.build());
}
}