我已经使用远程视图在推送通知中使用了计时器,它工作正常,但一旦到达 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(); }
}
我能够通过使用带有通知生成器的 setTimeoutAfter(totalMilliSec) 方法来删除通知。