Как возобновить таймер в диалоговом окне, когда приложение открывается при нажатии на уведомление - PullRequest
0 голосов
/ 18 июня 2019

У меня есть диалоговое окно, которое открывается, когда приходит любое push-уведомление, и оно длится 30 секунд.Работает нормально, если приложение на переднем плане, но если приложение на заднем плане, запускается основное действие, и должно появиться диалоговое окно с оставшимся таймером.Но здесь я могу показать диалоговое окно, но время снова начинается с 30 секунд, которые я не хочу.Что я пробовал до сих пор: 1. В FirebaseMessagingService я установил широковещательный приемник для отправки широковещательной рассылки другим действиям, чтобы начать диалог.Он работает нормально и отправляет трансляцию для начала деятельности.и когда я нажимаю на уведомление, появляется диалоговое окно, но не показывает таймер.2. Я попытался использовать службу для запуска таймера, и служба запускается, но таймер не работает.3. Я создал еще один вещательный приемник в первом вещательном приемнике, чтобы установить время в диалоговом окне.Это работает даже в фоновом режиме, но не обновляет значения таймера.4. Запуск таймера обратного отсчета в фоновом режиме при получении push-уведомления Я также использовал это, но в этом, как обновить значения.

if(event.equals(eventName)){
            String remoteMessageDate = remoteMessage.getData().get(eventName).toString();
            intent = new Intent(this, DashboardMapsActivity.class);
            Gson gson = new Gson();
            booking = gson.fromJson(remoteMessageDate, BookingResult.class);
            sendAllocateBroadcast(AppConstants.INSTANCE.getRIDE_REQUEST(), booking);
            intent.putExtra(AppConstants.INSTANCE.getRIDE_REQUEST(),booking);
            Log.w(TAG, "setActions: "+ Calendar.getInstance().getTime().toLocaleString());
            intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
         //   intent.setFlags(Intent.FL);
            String message = "You have new booking";
            createNotification(message);
BroadcastReceiver
 BroadcastReceiver rideRequestreceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if(intent.hasExtra(AppConstants.INSTANCE.getRIDE_REQUEST()))
            {
                Toast.makeText(DashboardMapsActivity.this,"booking Received",Toast.LENGTH_SHORT).show();
                booking = (BookingResult) intent.getSerializableExtra(AppConstants.INSTANCE.getRIDE_REQUEST());
                countDownTimer(booking.getBooking().getBookingId());

                setFCMNewRideDialogValue(booking);
            }
        }
    };
CountDownTimer
 private void countDownTimer(final Integer bookingId) {
        Intent intent1 = new Intent(this, TimerService.class);
        startService(intent1);
        countDownTimer = new CountDownTimer(30000,1000) {
            @Override
            public void onTick(long millisUntilFinished) {
              //  Log.w(TAG, "onTick: "+ TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished));
                rideRequestDialog.setTimerValues(TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished));
            }

            @Override
            public void onFinish() {
              //  Log.w(TAG, "onFinish: timer finish " );
                rideRequestDialog.rideDismiss();
                rejectRide(bookingId);
            }
        }.start();
    }
OnCreate
 if (intent.hasExtra(AppConstants.INSTANCE.getRIDE_REQUEST())) {
            booking = (BookingResult) intent.getSerializableExtra(AppConstants.INSTANCE.getRIDE_REQUEST());
            if(!(rideRequestDialog.dialogShowing()))
            {
                setFCMNewRideDialogValue(booking);
            }
        } else {
            // Do something else
        }

Я хочу показать диалоговое окно с рабочими значениями таймера

...