Member 12661286 Ответов: 2

Установите несколько будильников с одной трансляцией в android


Я пишу эту программу для установки сигналов тревоги и хочу, чтобы эти сигналы тревоги отправляли уведомление пользователю в специальное время.Я использую AlarmManager и BroadcastReceiver. Но он просто работает для одного будильника, и просто SetAlarm(20) работает и отправляет уведомление. Как я могу использовать будильник и уведомление более одного и в течение нескольких раз?

Это мой метод сигнализации и мой приемник:

Что я уже пробовал:

public class Main3Activity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);

        SetAlarm(10);
        SetAlarm(20);


    }


    private void SetAlarm(int sec) {
        AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);

        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.SECOND, sec);

        long time = cal.getTimeInMillis();

        Intent i = new Intent(Main3Activity.this, MyReceiver.class);

        PendingIntent pi = PendingIntent.getBroadcast(Main3Activity.this, 0, i, 0);

        am.set(AlarmManager.RTC_WAKEUP, time, pi);

    }


}




public class MyReceiver extends BroadcastReceiver {



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

        showNotification(context,Main3Activity.class,"Test Time","do it now");


    }

    public static void showNotification(Context context,Class<?> cls,String title,String content)

    {

        Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);




        Intent notificationIntent = new Intent(context, cls);

        notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);




        TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);

        stackBuilder.addParentStack(cls);

        stackBuilder.addNextIntent(notificationIntent);




        PendingIntent pendingIntent = stackBuilder.getPendingIntent(

                DAILY_REMINDER_REQUEST_CODE,PendingIntent.FLAG_UPDATE_CURRENT);




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

        Notification notification = builder.setContentTitle(title)

                .setContentText(content).setAutoCancel(true)

                .setSound(alarmSound).setSmallIcon(R.mipmap.ic_launcher_round)

                .setContentIntent(pendingIntent).build();



        NotificationManager notificationManager = (NotificationManager)

                context.getSystemService(Context.NOTIFICATION_SERVICE);

        notificationManager.notify(DAILY_REMINDER_REQUEST_CODE, notification);

    }

David Crow

Из документации:

Если уже есть сигнал тревоги, запланированный для того же IntentSender, то этот предыдущий сигнал тревоги сначала будет отменен.

Таким образом, ваш 10-секундный будильник не будет работать так, как ожидалось.

2 Ответов

Рейтинг:
2

JoCodes

Из документации следует, что
Когда вы устанавливаете второй сигнал тревоги, который использует то же самое ожидающее намерение, он заменяет исходный сигнал тревоги.

Таким образом, вы должны использовать различные BroadcastIds для ожидающего намерения здесь

int ticks = (int) System.currentTimeMillis();
PendingIntent pi = PendingIntent.getBroadcast(Main3Activity.this, ticks, i, 0);


Надеюсь, это поможет!!!


Рейтинг:
0

Member 14080714

PendingIntent pendingIntent = PendingIntent.getBroadcast(Disease_Credentials.this,_id,intent2,PendingIntent.FLAG_ONE_SHOT);

Добавь
,PendingIntent.FLAG_ONE_SHOT
при этом вместо 0