首页 > 解决方案 > 我创建的本地通知正在立即发送,而不是在我希望发送的日期

问题描述

我开始了 bradcastreceiver 和服务。我创建的本地通知会立即发送,而不是在我希望发送的日期。示例:我为 18:30 创建了闹钟,现在时间是 18:00。通知已在 18:00 发送。我无法解决问题。请帮忙。谢谢你 。

任务活动.java

 private void registerMyAlarmBroadcast() {

    myBroadcastReceiver = new BroadcastReceiver() {

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

            LocalDate now = LocalDate.now().plusDays(1);
            String date=utilityMethods.convertDate(now.toString());

            Intent dailyUpdater = new Intent(TasksActivity.this, MyService.class);
            dailyUpdater.putExtra("now",date);

            startService(dailyUpdater);

        }
    };

    registerReceiver(myBroadcastReceiver, new IntentFilter("com.devopergirl.dts"));
    myPendingIntent = PendingIntent.getBroadcast(this, 0, new Intent("com.devopergirl.dts"), 0);
    alarmManager = (AlarmManager) (this.getSystemService(Context.ALARM_SERVICE));
}

我的服务.java

 @Override
public int onStartCommand(Intent intent, int flags, int startId) {

    Log.i(TAG, "ON START COMMAND ÇAĞRILDI " + Thread.currentThread().getName() + " THREAD UZERINDE ÇALIŞIYOR");
  /*  databaseAccess.open();
    list = databaseAccess.getTaskList(utilityMethods.getFileNo());
    databaseAccess.close();*/
    //String nowDate = intent.getStringExtra("now");

     for (Task task : list) {
        StringTokenizer tokens = new StringTokenizer(task.getStartDate(), "/");
            String day = tokens.nextToken();// this will contain "Fruit"
            String month = tokens.nextToken();//
            String year = tokens.nextToken();

            StringTokenizer time = new StringTokenizer(task.getStartTime(), ":");
            String minute = time.nextToken();
            String hour = time.nextToken();

            Calendar calender = Calendar.getInstance(Locale.getDefault());
            calender.clear();
            int monthNew = Integer.parseInt(month) - 1;
            calender.set(Calendar.MONTH, monthNew);
            calender.set(Calendar.DAY_OF_MONTH, Integer.parseInt(day));
            calender.set(Calendar.YEAR, Integer.parseInt(year));
            calender.set(Calendar.HOUR, Integer.parseInt(hour));
            calender.set(Calendar.MINUTE, Integer.parseInt(minute));
            calender.set(Calendar.SECOND, 0);
            TimeZone tz = calender.getTimeZone();
            String dkd = tz.getDisplayName();
            long calMills = calender.getTimeInMillis();

            String alertTitle = task.getCategoryName();
            String alertContent = task.getStartTime() + " " + task.getEndTime();


            Intent myIntent = new Intent(MyService.this,
                    NotificationManager2.class);
            myIntent.putExtra(context.getString(R.string.alert_title), alertTitle);
            myIntent.putExtra(context.getString(R.string.alert_content), alertContent);

            PendingIntent pendingIntent = PendingIntent.getBroadcast(MyService.this
                    .getApplication(), 0, myIntent, PendingIntent.FLAG_CANCEL_CURRENT);
            AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

            assert alarmMgr != null;
            alarmMgr.set(AlarmManager.RTC_WAKEUP, calender.getTimeInMillis(), pendingIntent);

            System.out.println(calender.getTimeInMillis());
        }
    }
    }


    return START_STICKY;
}

NotificationManager2.java:

@Override
public void onReceive(Context context, Intent intent) {
    String Title = intent.getStringExtra(context.getString(R.string.titttle));
    String content = intent.getStringExtra(context.getString(R.string.alert_content));

    NotificationCompat.Builder builder =
            new NotificationCompat.Builder(context)
                    .setSmallIcon(R.drawable.ic_action_alarms)
                    .setContentTitle(Title)
                    .setContentText(content).setSound(Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE
                    + "://" + context.getPackageName() + "/raw/notify"));

    // Add as notification
    android.app.NotificationManager manager = (android.app.NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    manager.notify(0, builder.build());
}

标签: androidservicebroadcastreceiveralarmmanagerlocalnotification

解决方案


推荐阅读