当应用关闭时,阻止通知被销毁

问题描述

我正在制作一个Android应用程序,它将允许用户按下按钮并显示带有计时器的通知,该计时器在一定时间内会倒计时。尽管我已将通知设置为持久状态,因此无法将其关闭,但当应用关闭时,通知将被销毁。

一旦应用程序关闭且没有销毁,是否有任何方法可以允许通知继续运行。

以下是启动我的通知和计时器的代码

final NotificationCompat.Builder builder = new NotificationCompat.Builder(context,"notifyLemubit")
                            .setSmallIcon(holder.img_timer.getimageAlpha())
                            .setContentTitle("Timer Running")
                            .setContentText("Time Until Your " + timer.getTimer_name() + " Tree has Fully Grown: " + timer.getTimer_duration_s())
                            .setongoing(true)
                            .setPriority(NotificationCompat.PRIORITY_DEFAULT);

                    final notificationmanagerCompat notificationmanagerCompat = notificationmanagerCompat.from(context);
                    notificationmanagerCompat.notify(timer.getTimer_id(),builder.build());

                    new CountDownTimer(10 * ONE_SECOND,ONE_SECOND) {

                        @Override
                        public void onTick(long ms_until_done) {
                            builder.setContentText("Time Until Your " + timer.getTimer_name() + " Tree has Fully Grown: " + ms_until_done / ONE_SECOND);
                            notificationmanagerCompat.notify(timer.getTimer_id(),builder.build());
                        }

                        @Override
                        public void onFinish() {
                            notificationmanagerCompat.cancel(timer.getTimer_id());
                            final NotificationCompat.Builder builder = new NotificationCompat.Builder(context,"notifyLemubit")
                                    .setSmallIcon(holder.img_timer.getimageAlpha())
                                    .setContentTitle("Timer Finished")
                                    .setContentText("Your " + timer.getTimer_name() + " is Fully Grown!")
                                    .setPriority(NotificationCompat.PRIORITY_DEFAULT);

                            final notificationmanagerCompat notificationmanagerCompat = notificationmanagerCompat.from(context);
                            notificationmanagerCompat.notify(timer.getTimer_id(),builder.build());
                        }
                    }.start();

感谢您的帮助,谢谢

解决方法

到目前为止,我知道的唯一方法是通过扩展ServiceIntentService类来使用前景服务

在您的活动或适配器内部,使用它来启动服务

context.startService(Intent(context,PersistentNotificationService.class))

在此使用此服务

public class PersistentNotificationService extends Service {

    private final static int ONE_SECOND = 1000;

    @Override
    public int onStartCommand(Intent intent,int flags,int startId) {
        final NotificationCompat.Builder builder = new NotificationCompat.Builder(this,"notifyLemubit")
                .setSmallIcon(R.drawable.img_timer)
                .setContentTitle("Timer Running")
                .setContentText("Your title goes here")
                .setOngoing(true)
                .setPriority(NotificationCompat.PRIORITY_DEFAULT);


        new CountDownTimer(10 * ONE_SECOND,ONE_SECOND) {

            @Override
            public void onTick(long ms_until_done) {
                // Whatever code you want here
            }

            @Override
            public void onFinish() {
                // To cancel,just close the service
                stopForeground(true);
                stopSelf();
            }
        }.start();

        startForeground(2342,builder.build());

        return START_STICKY;
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...