проблема в отправке уведомлений в разное время для каждой записи - PullRequest
0 голосов
/ 12 марта 2019

Я работаю над приложением домашней аптеки, в котором есть несколько участников для каждого отдельного пользователя, это значит (одно приложение для всех членов семьи), поэтому у меня есть таблица пользователей, таблица участников, таблица лекарств и таблица member_drugs.

таблица элементов имеет столбцы:

id, user_id, name, age, ... и т.д ...

таблица member_drugs содержит столбцы:

id, member_id, drug_id, drug dose, drug dose repetition (т. Е. Сколько часов между первой дозой и последующими дозами в течение одного дня - может быть 6 часов), first time dose и т. Д....

теперь мне нужно отправлять уведомления для каждого напоминания дозы (все повторения в определенное время).

, например:

препарат x для члена y иПовторение дозы препарата составляет 3 часа, а первый раз для препарата - 12 часов утра, поэтому: мне нужно отправить уведомление через: 1 - первый раз через: 12 am.и повторения в:

2- 3 am.

3- 6 am.

4- 9 am.

5-.... и т.д ..

моя проблема в том, что уведомление приходит только в первый раз.

Я пробовал в этом коде, но он не работает.Я не знаю, что я пропустил

это мой метод обслуживания уведомлений:

@Override
    protected void onHandleWork(Intent intent) {

        Date date = new Date();
        toda = dateFormat.format(date);
        today = dateFormat.parse(toda, new ParsePosition(0));

        java.util.Date date1 = new java.util.Date();
        String current = sdf.format(date1);

        Date now1 = sdf.parse(current, new ParsePosition(0));
        String now = sdf.format(now1);
        arrayList1 = setTimeAlarm();
        if (arrayList1 != null) {
            if (arrayList1.size() > 0) {
                for (DrugAlert d : arrayList1) {
                    Log.d(getClass().getSimpleName(), "heeeeeeeeeeeeer");

                    String start = d.get_start_date();
                    Date d1 = dateFormat.parse(start, new ParsePosition(0));
                    String end = d.get_end_date();
                    Date d2 = dateFormat.parse(end, new ParsePosition(0));
                    String firstTime = d.getAlert_time();
                    Date t1 = sdf.parse(firstTime, new ParsePosition(0));
                    String t = sdf.format(t1);
                    int repeat = d.getDose_r();

                    Calendar cal = Calendar.getInstance(); // creates calendar
                    cal.setTime(t1); // sets calendar time/date

                    if ((d2.after(today) || d2.equals(today)) && (d1.equals(today) || today.after(d1))) {
                            for (int i = repeat; i<=24; i = i +repeat){
                               // i = repeat;
                                cal.add(Calendar.HOUR_OF_DAY,i); // adds one hour if repeat == 1
                                cal.getTime(); // returns new date object, one hour in the future
                                Date repDose1 = cal.getTime();
                                String repDose = sdf.format(repDose1);
                                if (t.equals(now) || repDose.equals(now) ) {
                                    memName = d.getMember_name();
                                    drugName = d.getDrug_name();
                                    courseId = d.get__id();
                                    dose = d.getDose_q();
                                    Log.d(getClass().getSimpleName(), "onHandleIntent, started handling a notification event");
                                    try {
                                        processStartNotification();
                                        NOTIFICATION_ID = NOTIFICATION_ID +1;
                                        String action = intent.getAction();
                                        if (ACTION_START.equals(action)) {
                                            processStartNotification();
                                        }
                                    } finally {
                                        WakefulBroadcastReceiver.completeWakefulIntent(intent);

                                    }
                                }
                            }



                    }
                }
            }
        }


    }

1 Ответ

0 голосов
/ 13 марта 2019

исправляю по следующему коду:

 @Override
    protected void onHandleWork(Intent intent) {

        Date date = new Date();
        toda = dateFormat.format(date);
        today = dateFormat.parse(toda, new ParsePosition(0));

        java.util.Date date1 = new java.util.Date();
        String current = sdf.format(date1);

        Date now1 = sdf.parse(current, new ParsePosition(0));
        String now = sdf.format(now1);
        arrayList1 = setTimeAlarm();
        if (arrayList1 != null) {
            if (arrayList1.size() > 0) {
                for (DrugAlert d : arrayList1) {
                    Log.d(getClass().getSimpleName(), "heeeeeeeeeeeeer");

                    String start = d.get_start_date();
                    Date d1 = dateFormat.parse(start, new ParsePosition(0));
                    String end = d.get_end_date();
                    Date d2 = dateFormat.parse(end, new ParsePosition(0));
                    String firstTime = d.getAlert_time();
                    Date t1 = sdf.parse(firstTime, new ParsePosition(0));
                    String t = sdf.format(t1);
                    int repeat = d.getDose_r();
                    
                    if ((d2.after(today) || d2.equals(today)) && (d1.equals(today) || today.after(d1))) {
                          //  for (int i = repeat; i<=24; i = i +repeat){
                        int f = repeat;
                        while (f <= 24){
                            Calendar cal = Calendar.getInstance(); // creates calendar
                            cal.setTime(t1); // sets calendar time/date
                            cal.add(Calendar.HOUR_OF_DAY, f);// adds one hour if repeat == 1
                            cal.add(Calendar.MINUTE, 0);
                            cal.add(Calendar.SECOND, 0);

                                cal.getTime(); // returns new date object, one hour in the future
                                Date repDose1 = cal.getTime();
                                String repDose = sdf.format(repDose1);
                                if (t.equals(now) || repDose.equals(now)) {

                                    memName = d.getMember_name();
                                    drugName = d.getDrug_name();
                                    courseId = d.get__id();
                                    dose = d.getDose_q();
                                    Log.d(getClass().getSimpleName(), "onHandleIntent, started handling a notification event");
                                    try {
                                        processStartNotification();
                                        NOTIFICATION_ID = NOTIFICATION_ID +1;
                                        String action = intent.getAction();
                                        if (ACTION_START.equals(action)) {
                                            processStartNotification();
                                        }
                                    } finally {
                                        WakefulBroadcastReceiver.completeWakefulIntent(intent);

                                    }
                                }
                                f = f + repeat;
                                if(f == 4){
                                    int x=1;
                                    int y=x+2;
                                }
                            }



                    }
                }
            }
        }


    }
...