Создание ежедневного повторяющегося уведомления, но каждый раз с рандомизированным контентом - PullRequest
0 голосов
/ 15 сентября 2018

То, что я пытаюсь сделать здесь, это рандомизировать содержимое уведомления каждый раз, когда оно всплывает.Но я понятия не имею, как это реализовать, вот как выглядит мой текущий код:

Main2Activity

public void startAlarm() {

    AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    Intent myIntent;
    PendingIntent pendingIntent;

    myIntent = new Intent(Main2Activity.this,AlarmNotificationReceiver.class);
    pendingIntent = PendingIntent.getBroadcast(this,0,myIntent,0);

    manager.setRepeating(AlarmManager.RTC_WAKEUP, SystemClock.elapsedRealtime()+0,86400000,pendingIntent);
}

Вот мой класс приемника:

AlarmNotificationReceiver

public class AlarmNotificationReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    NotificationCompat.Builder builder1 = new NotificationCompat.Builder(context);
    NotificationCompat.Builder builder2 = new NotificationCompat.Builder(context);
    NotificationCompat.Builder builder3 = new NotificationCompat.Builder(context);

    builder1.setAutoCancel(true)
            .setDefaults(Notification.DEFAULT_ALL)
            .setWhen(System.currentTimeMillis())
            .setSmallIcon(R.mipmap.ic_launcher)
            .setContentTitle("Alarm 1 actived!")
            .setContentText("THIS IS MY ALARM")
            .setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_SOUND)
            .setContentInfo("Info");

    builder2.setAutoCancel(true)
            .setDefaults(Notification.DEFAULT_ALL)
            .setWhen(System.currentTimeMillis())
            .setSmallIcon(R.mipmap.ic_launcher)
            .setContentTitle("Alarm 2 actived!")
            .setContentText("THIS IS MY ALARM")
            .setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_SOUND)
            .setContentInfo("Info");

    builder3.setAutoCancel(true)
            .setDefaults(Notification.DEFAULT_ALL)
            .setWhen(System.currentTimeMillis())
            .setSmallIcon(R.mipmap.ic_launcher)
            .setContentTitle("Alarm 3 actived!")
            .setContentText("THIS IS MY ALARM")
            .setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_SOUND)
            .setContentInfo("Info");

    NotificationManager notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(1,builder1.build());
}
}

Моя проблема здесь в этой нижней части ...

enter image description here

Как сделать его случайным при каждом срабатывании будильника?

1 Ответ

0 голосов
/ 18 сентября 2018

Используйте класс Random для генерации случайных объектов (булевых, целых чисел и т. Д.), Затем swtich сгенерированное число и отправьте соответствующее уведомление.

Random random = new Random(System.currentTimeMillis());
switch(random.nextInt(3)){
    case 0:
        // notify builder 1
        break;
    case 1:
        // notify builder 2
        break;
    case 2:
        // notify builder 3
        break;
}

Я действительно рекомендую рефакторинг вашего кода, так как нет необходимости создавать 3 идентичных объекта со многими общими атрибутами, где вы можете использовать только один и изменять его содержимое в соответствии со случаем, который вы получили от генератора случайных чисел.Ниже приведен пример

NotificationCompat.Builder builder = new NotificationCompat.Builder(context);

builder.setAutoCancel(true)
        .setDefaults(Notification.DEFAULT_ALL)
        .setWhen(System.currentTimeMillis())
        .setSmallIcon(R.mipmap.ic_launcher)
        .setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_SOUND);

Random random = new Random(System.currentTimeMillis());
switch (random.nextInt(3)) {
    case 0:
        builder.setContentTitle("Alarm 1 activated!")
                .setContentText("THIS IS MY ALARM")
                .setContentInfo("Info");
        break;
    case 1:
        builder.setContentTitle("Alarm 2 activated!")
                .setContentText("THIS IS MY ALARM")
                .setContentInfo("Info");
        break;
    case 2:
        builder.setContentTitle("Alarm 3 activated!")
                .setContentText("THIS IS MY ALARM")
                .setContentInfo("Info");
        break;
}

NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(1, builder.build());
...