Question

For example: in the Activty A I have a Chronometer, I click on play to start it and when it arrives at 00:00:10 I decide to go to Activity B. I stay on it for 30 seconds before returning to A. I would find the timer paused still displaying 00:00:10, but I'd like to see it still running and then at 00:00:40. How can I do this? How can I avoid the timer pausing on the change of Activity?

Was it helpful?

Solution

(Based on the answer given for Get time of chronometer widget, with code for and extra activity added.)

The main activity:

package com.so.chilledrat.chronoexample;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.LinearLayout;
import android.widget.Toast;

public class ChronoExampleActivity extends Activity {
    Chronometer mChronometer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        LinearLayout layout = new LinearLayout(this);
        layout.setOrientation(LinearLayout.VERTICAL);

        mChronometer = new Chronometer(this);
        layout.addView(mChronometer);

        Button startButton = new Button(this);
        startButton.setText("Start");
        startButton.setOnClickListener(mStartListener);
        layout.addView(startButton);

        Button stopButton = new Button(this);
        stopButton.setText("Stop");
        stopButton.setOnClickListener(mStopListener);
        layout.addView(stopButton);

        Button resetButton = new Button(this);
        resetButton.setText("Reset");
        resetButton.setOnClickListener(mResetListener);
        layout.addView(resetButton);

        Button switchButton = new Button(this);
        switchButton.setText("Switch Activity");
        switchButton.setOnClickListener(mSwitchListener);
        layout.addView(switchButton);

        setContentView(layout);
    }

    private void showElapsedTime() {
        long elapsedMillis = SystemClock.elapsedRealtime() - mChronometer.getBase();
        Toast.makeText(this, "Elapsed milliseconds: " + elapsedMillis, Toast.LENGTH_SHORT).show();
    }

    View.OnClickListener mStartListener = new OnClickListener() {
        public void onClick(View v) {
            mChronometer.start();
            showElapsedTime();
        }
    };

    View.OnClickListener mStopListener = new OnClickListener() {
        public void onClick(View v) {
            mChronometer.stop();
            showElapsedTime();
        }
    };

    View.OnClickListener mResetListener = new OnClickListener() {
        public void onClick(View v) {
            mChronometer.setBase(SystemClock.elapsedRealtime());
            showElapsedTime();
        }
    };

    View.OnClickListener mSwitchListener = new OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent myIntent = new Intent(ChronoExampleActivity.this.getBaseContext(), OtherActivity.class);
            startActivityForResult(myIntent, 0);
        }
    };
}

The other activity to switch to:

package com.so.chilledrat.chronoexample;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;

public class OtherActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LinearLayout layout = new LinearLayout(this);
        layout.setOrientation(LinearLayout.VERTICAL);

        Button switchButton = new Button(this);
        switchButton.setText("Switch Back");
        switchButton.setOnClickListener(mSwitchListener);
        layout.addView(switchButton);

        setContentView(layout);
    }

    View.OnClickListener mSwitchListener = new OnClickListener() {

        @Override
        public void onClick(View v) {
            // Intent myIntent = new Intent(OtherActivity.this.getBaseContext(),
            // ChronoExampleActivity.class);
            // startActivityForResult(myIntent, 0);
            finish();
        }

    };
}

And finally the manifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.so.chilledrat.chronoexample"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="7" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".ChronoExampleActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="OtherActivity"></activity>
    </application>

</manifest>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top