首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每条记录多个特定时间推送通知问题

每条记录多个特定时间推送通知问题
EN

Stack Overflow用户
提问于 2019-03-13 01:42:50
回答 1查看 18关注 0票数 0

我正在开发家庭药房应用程序,每个用户都有多个成员,这意味着(所有家庭成员都有一个应用程序),所以我有一个用户表和成员表,药品表和member_drugs表。

成员表有列:

iduser_idnameage,...etc...

member_drugs表包含以下各列:

idmember_iddrug_iddrug dosedrug dose repetition (即一天中第一次和第二次注射之间的时间间隔--可能是6小时),first time dose,等等……

现在我需要推送每个剂量提醒的通知(在其特定时间内的所有重复)。

例如:

成员y的药物x,药物剂量重复是3小时,药物的第一次是上午12点,所以:我需要推送通知: 1-第一次在:12 am。以及以下内容中的重复:

2- 3 am

3- 6 am

4- 9 am

5- ....等等。

我的问题是通知只是第一次出现。

我在这段代码中尝试过,但它不起作用。我不知道我错过了什么

这是我的通知服务方法:

代码语言:javascript
复制
@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);

                                    }
                                }
                            }



                    }
                }
            }
        }


    }
EN

回答 1

Stack Overflow用户

发布于 2019-03-13 09:32:46

我通过以下代码修复:

代码语言:javascript
复制
 @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;
                                }
                            }



                    }
                }
            }
        }


    }

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55127656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档