如何在推送通知内到达 00:00:00 时停止计时器

问题描述 投票:0回答:1

我已经使用远程视图在推送通知中使用了计时器,它工作正常,但一旦到达 00:00:00,它就开始显示负值,如 -01:00:00。我想在这种情况下清除通知。为此,我使用了 Handler,当应用程序处于后台或前台状态时,它可以正常工作,但是当应用程序被终止时,通知不会自行清除。请让我知道可以采取什么措施来解决这个问题。下面是我的代码:

天文台表实施:

if (!ends_at.isEmpty()){
            Calendar end_calendar = Calendar.getInstance();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date endDate = null;
            try {
                endDate = sdf.parse(ends_at);
                end_calendar.setTime(endDate);
                long startTime = SystemClock.elapsedRealtime();
                Date now = new Date();
                long elapsed = now.getTime() - end_calendar.getTimeInMillis();
                long remainingTime = startTime - elapsed;
                if(elapsed<0) {
                    expandedView.setChronometerCountDown(R.id.chronometer, true);
                    expandedView.setViewVisibility(R.id.timer_view, View.VISIBLE);
                    expandedView.setChronometer(R.id.chronometer, remainingTime, "%tH:%tM:%tS", true);
                }
                else{
                    expandedView.setViewVisibility(R.id.timer_view, View.GONE);
                }
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }

用于移除推送:

if (!ends_at.isEmpty()) {
            Calendar start_calendar = Calendar.getInstance();
            Calendar end_calendar = Calendar.getInstance();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date endDate;
            try {
                endDate = sdf.parse(ends_at);
                assert endDate != null;
                end_calendar.setTime(endDate);
                long total_millis = (end_calendar.getTimeInMillis() - start_calendar.getTimeInMillis());
                mHandler = new Handler(Looper.getMainLooper());
                int finalM = m;
                mHandler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        notificationManager.cancel(finalM);
                    }
                }, total_millis);
            }
            catch (ParseException e) { e.printStackTrace(); }
        }

android push-notification android-notifications chronometer
1个回答
0
投票

我能够通过使用带有通知生成器的 setTimeoutAfter(totalMilliSec) 方法来删除通知。

© www.soinside.com 2019 - 2024. All rights reserved.