Приложение, показывающее только последний установленный текст в теле уведомления - PullRequest
0 голосов
/ 05 мая 2019

Я изучаю уведомления 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);
    }
}

Будет полезно, если кто-то исправит меня.

...