Я изучаю уведомления Android.Я написал код, в котором я установил другой идентификатор для намерения, а также для диспетчера уведомлений.Я хочу, чтобы андроид показывал два разных уведомления.Однако отображается только одно уведомление, а в теле уведомления отображается только последний установленный текст.
Я видел некоторые из тех же сообщений, в которых упоминалось, что они имеют уникальный идентификатор для намерения и менеджера.Я установил уникальный идентификатор для каждого из них каждый раз, когда нажимал кнопку, однако он по-прежнему показывает одно уведомление с последним установленным текстом.
Мой код для основной активности:
private int h;
private int min;
public static int myId = 0;
Calendar c;
public static String notificationHead;
public static String notificationBody;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button picker = findViewById(R.id.timePicker);
picker.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogFragment timePicker = new TimePickerFragment();
timePicker.show(getSupportFragmentManager(), "time picker");
}
});
Button picker1 = findViewById(R.id.datePicker);
picker1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogFragment datePicker = new DatePickerFragment();
datePicker.show(getSupportFragmentManager(), "date picker");
}
});
Button alarm1 = findViewById(R.id.alarm1);
alarm1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myId += 1;
//Toast.makeText(v.getContext(), Integer.toString(myId), Toast.LENGTH_SHORT).show();
notificationHead = "Good Notes Keeper";
notificationBody = "Take shower";
startAlarm(c, myId);
}
});
Button alarm2 = findViewById(R.id.alarm2);
alarm2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myId = 2;
notificationHead = "Good Notes Keeper";
notificationBody = "Brush teeth";
startAlarm(c, myId);
}
});
}
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
// c = Calendar.getInstance();
min = minute;
h = hourOfDay;
// c.set(Calendar.HOUR_OF_DAY, h);
// c.set(Calendar.MINUTE, min);
// c.set(Calendar.MINUTE, minute);
// c.set(Calendar.SECOND, 0);
// startAlarm(c);
}
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
c = Calendar.getInstance();
c.set(year, month, dayOfMonth);
c.set(Calendar.HOUR_OF_DAY, h);
c.set(Calendar.MINUTE, min);
}
private void startAlarm(Calendar c, int id){
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, AlertReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, id, intent, 0);
alarmManager.setExact(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pendingIntent);
}
}
Мой коддля alertreceiver
public class AlertReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
NotificationHelper helper = new NotificationHelper(context);
NotificationCompat.Builder nb = helper.getChannelNotification();
helper.getManager().notify(MainActivity.myId, nb.build());
Log.e("Alert", String.valueOf(MainActivity.myId));
}
}
Уведомлениеhelper class
public class NotificationHelper extends ContextWrapper {
public static final String CHANNEL_ID = "channelId";
private NotificationManager mManager;
public NotificationHelper(Context context){
super(context);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
createChannel();
}
}
@TargetApi(Build.VERSION_CODES.O)
private void createChannel(){
NotificationChannel channel = new
NotificationChannel(CHANNEL_ID, "channel1",
NotificationManager.IMPORTANCE_HIGH);
getManager().createNotificationChannel(channel);
}
public NotificationManager getManager(){
if(mManager == null){
mManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
}
return mManager;
}
public NotificationCompat.Builder getChannelNotification() {
return new NotificationCompat.Builder(getApplicationContext(), CHANNEL_ID)
.setContentTitle(MainActivity.notificationHead)
.setContentText(MainActivity.notificationBody)
.setSmallIcon(R.drawable.gnkbw);
}
}
Будет полезно, если кто-то исправит меня.