0

I am facing issue in chronometer if I pause chronometer it not starting where it is stopped. so I need to start where it is stopped. In onlocation change method if meter less then 5 meters time will start if greater then 5 meters the time will stop but it is not starting where it is stopped

public class MainActivity{

@Override
public void onLocationChanged(@NonNull Location location) {

        if (mPresenter.getLocalSTATUS() != null && mPresenter.getLocalSTATUS().equalsIgnoreCase(LOCAL_CONTINUE_RIDE))
                    {
                        if(mPresenter.getLocalSTATUS().equalsIgnoreCase(LOCAL_CONTINUE_RIDE))
                        {

                            if (results[0] < 5.09) {
                                cmTimer.start();

                            }
                            else {
                                pauseOffset = SystemClock.elapsedRealtime();
                                cmTimer.stop();

                            }


                        }
                    }

        }

        public void DonePickUpUI_OnClick() {
        if (!resume) {
                            cmTimer.setBase(SystemClock.elapsedRealtime());
                            cmTimer.start();

                        } else {
                            cmTimer.start();
                        }
                        assert cmTimer != null;
                        cmTimer.setOnChronometerTickListener(arg0 -> {
                            if (!resume) {
                                if(mPresenter.getLocalSTATUS().equalsIgnoreCase(LOCAL_START_RIDE)) {
                                    long minute = (((SystemClock.elapsedRealtime() - cmTimer.getBase()) / 1000) / 60);
                                    long second = (((SystemClock.elapsedRealtime() - cmTimer.getBase()) / 1000) % 60);
                                    elapsedTime_Done_pickup = SystemClock.elapsedRealtime();
                                    Log.d(TAG, "onChronometerTick: " + minute + " : " + second);
                                    offline_waiting_time.setText(minute + " : " + second);
                                }
                            } else {
                                if (mPresenter.getLocalSTATUS().equalsIgnoreCase(LOCAL_START_RIDE)) {
                                    long minute = ((elapsedTime_Done_pickup - cmTimer.getBase()) / 1000) / 60;
                                    long second = ((elapsedTime_Done_pickup - cmTimer.getBase()) / 1000) % 60;
                                    elapsedTime_Done_pickup = elapsedTime_Done_pickup + 1000;
                                    Log.d(TAG, "onChronometerTick: " + minute + " : " + second);
                                    offline_waiting_time.setText(minute + " : " + second);
                                    /*offline booking*/
                                }
                            }
                        });
                    /*offline booking*/


                }

         private void startRide_OnCLICK() {

               cmTimer.setOnChronometerTickListener(arg0 -> {
                        if (!resume) {
                            if(mPresenter.getLocalSTATUS().equalsIgnoreCase(LOCAL_CONTINUE_RIDE)) {
                                long minute = (((SystemClock.elapsedRealtime() - cmTimer.getBase()) / 1000) / 60) - elapsedTime_Done_pickup;
                                long second = (((SystemClock.elapsedRealtime() - cmTimer.getBase()) / 1000) % 60) - elapsedTime_Done_pickup;
                                elapsedTime_Done_pickup = SystemClock.elapsedRealtime();
                                Log.d(TAG, "onChronometerTick: " + minute + " : " + second);
                                offline_waiting_time.setText(minute + " : " + second);
                            }
                        } else {
                            if (mPresenter.getLocalSTATUS().equalsIgnoreCase(LOCAL_CONTINUE_RIDE)) {
                                long minute = ((elapsedTime_Done_pickup - cmTimer.getBase()) / 1000) / 60;
                                long second = ((elapsedTime_Done_pickup - cmTimer.getBase()) / 1000) % 60;
                                elapsedTime_Done_pickup = elapsedTime_Done_pickup + 1000;
                                Log.d(TAG, "onChronometerTick: " + minute + " : " + second);
                                offline_waiting_time.setText(minute + " : " + second);
                                /*offline booking*/
                            }
                        }
                    });



         }      


    }}
Anas Mehar
  • 2,739
  • 14
  • 25
taxideals
  • 37
  • 5
  • Someone's "resume" implementation: https://stackoverflow.com/a/25315085/2711811 –  Sep 04 '19 at 12:04

1 Answers1

0

You are gonna need a variable that keeps track on the time.

long timeWhenStopped = 0;

Update the value of the variable when you stop the chronometer

timeWhenStopped = cmTimer.getBase() - SystemClock.elapsedRealtime();
cmTimer.stop();

Use this variable to adjust the chronometer before starting it

cmTimer.setBase(SystemClock.elapsedRealtime() + timeWhenStopped);
cmTimer.start();

And finally if you have a way to reset your chronometer then you should remember to also reset the timeWhenStopped variable.

cmTimer.setBase(SystemClock.elapsedRealtime());
timeWhenStopped = 0;
Sesha
  • 1