How to reseume timer - android

Hi I am making sport countdown timer and I have pause button. To pause timer I am using :(code bellow)
but I don't know hot to resume it. And I don't want to put my countdown timer function in public void method.
mButtonStartPause.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
if (mTimerRunning) {
pauseTimer();
} else {
startTimer();
}
}
});
mButtonReset.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
resetTimer();
}
});
mCountDownTimer = new CountDownTimer(mTimeLeftInMillis, 1000) {
#Override
public void onTick(long millisUntilFinished) {
mTimeLeftInMillis = millisUntilFinished;
updateCountDownText();
}
#Override
public void onFinish() {
mTimerRunning = false;
mButtonStartPause.setText("Start");
mButtonStartPause.setVisibility(View.INVISIBLE);
mButtonReset.setVisibility(View.VISIBLE);
}
}.start();
updateCountDownText();
}
private void startTimer() {
mTimerRunning = true;
mButtonStartPause.setText("pause");
mButtonReset.setVisibility(View.INVISIBLE);
}
private void pauseTimer() {
mCountDownTimer.cancel();
mTimerRunning = false;
mButtonStartPause.setText("Start");
mButtonReset.setVisibility(View.VISIBLE);
}
private void resetTimer() {
mTimeLeftInMillis = START_TIME_IN_MILLIS;
updateCountDownText();
mButtonReset.setVisibility(View.INVISIBLE);
mButtonStartPause.setVisibility(View.VISIBLE);
}
}

I checked your restart function. And I think solution to restart is to cancel it and start it again. Try this out:
private void resetTimer() {
mCountDownTimer.cancel();
mCountDownTimer.start();
}

Related

countdown time in android studio

I want to run the service when the countdown time has finished, but when I exit the application the command does not work, what's the solution?
time.java
private void startTimer() {
mEndTime = System.currentTimeMillis() + mTimeLeftInMillis;
mCountDownTimer = new CountDownTimer(mTimeLeftInMillis, 1000) {
#Override
public void onTick(long millisUntilFinished) {
mTimeLeftInMillis = millisUntilFinished;
updateCountDownText();
}
#Override
public void onFinish() {
mTimerRunning = false;
updateWatchInterface();
startService(new Intent(getBaseContext(), alert1.class));
}
}.start();
mTimerRunning = true;
updateWatchInterface();
}
this is the service class
alert1.java
public class alert1 extends Service {
#Nullable
#Override
public IBinder onBind(Intent intent) {
return null;
}
#Override
public int onStartCommand(Intent intent, int flags, int startId) {
try{
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
FirebaseDatabase database = FirebaseDatabase.getInstance();
final DatabaseReference myRef = database.getReference("RELAY1_STATUS");
myRef.setValue("OFF");
Toast.makeText(getBaseContext(),"off",Toast.LENGTH_LONG).show();
}
}, 0);
} catch (Exception e) {
e.printStackTrace();
}
return START_STICKY;
}
#Override
public void onDestroy() {
super.onDestroy();
}
}
You can try like this. First, send your counter time as a parameter. When time finished just start your service.
private void setTimerForStartService(int timeInMillis){
countDownTimer = new CountDownTimer(timeInMillis, 1000){
#Override
public void onTick(long millisUntilFinished) {
String text = String.format(Locale.getDefault(), "%02d",
TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) % 60);
updateCountDownText(text);
}
#Override
public void onFinish() {
mTimerRunning = false;
updateWatchInterface();
startService(new Intent(getBaseContext(), alert1.class));
}
}.start();
}

How to stop timer

Hi I have a button and a timer
I want to run a timer but when I click a button the timer should stop and the method test() should be called.
This is my code:
public class MainActivity extends AppCompatActivity {
Button button;
int a=1;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button)findViewById(R.id.btn);
button.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
a=6;
}
});
new CountDownTimer(30000, 4000) {
#Override
public void onTick(long millisUntilFinished) {
if (a<5)
{
Toast.makeText(MainActivity.this, ""+a, Toast.LENGTH_SHORT).show();
}
}
#Override
public void onFinish() {
test();
}
}.start();
}
private void test ()
{
Toast.makeText(this, "test is run", Toast.LENGTH_SHORT).show();
}
}
You have to define it first:
CountDownTimer yourCountDownTimer = new CountDownTimer(30000, 4000) {
public void onTick(long millisUntilFinished) {
if (a<5)
{
Toast.makeText(MainActivity.this, ""+a, Toast.LENGTH_SHORT).show();
}
}
public void onFinish() {
test();
}
}.start();
yourCountDownTimer.cancel(); //To Stop Timer
using cancel key word
timer.cancel();
timer.purge();
private CountDownTimer timer;
timer=new CountDownTimer(30000, 4000) {
#Override
public void onTick(long millisUntilFinished) {
if (a<5)
{
Toast.makeText(MainActivity.this, ""+a, Toast.LENGTH_SHORT).show();
}
}
#Override
public void onFinish() {
test();
}
}.start();
call timer.cancel() on onClick() metod of your button Listener.

android - handler don't work in loop [duplicate]

I try to do app which show elements. Each element should start showing when the before element was hidden. Each element is showing 2 seconds.
Code:
public void gameStart()
{
do
{
data = random.nextInt(6) + 1;
if (data == 1)
{
CountDownTimer cdt = new CountDownTimer(2000, 1000)
{
#Override
public void onTick(long millisUntilFinished)
{
element1.setVisibility(View.VISIBLE);
}
#Override
public void onFinish()
{
element1.setVisibility(View.GONE);
}
}.start();
{
CountDownTimer cdt = new CountDownTimer(2000, 1000)
{
#Override
public void onTick(long millisUntilFinished)
{
element2.setVisibility(View.VISIBLE);
}
#Override
public void onFinish()
{
element2.setVisibility(View.GONE);
}
}.start();
} else if (data == 3)
{
CountDownTimer cdt = new CountDownTimer(2000, 1000)
{
#Override
public void onTick(long millisUntilFinished)
{
element3.setVisibility(View.VISIBLE);
}
#Override
public void onFinish()
{
element3.setVisibility(View.GONE);
}
}.start();
} else if (data == 4)
{
CountDownTimer cdt = new CountDownTimer(2000, 1000)
{
#Override
public void onTick(long millisUntilFinished)
{
element4.setVisibility(View.VISIBLE);
}
#Override
public void onFinish()
{
element4.setVisibility(View.GONE);
}
}.start();
} else if (data == 5)
{
CountDownTimer cdt = new CountDownTimer(2000, 1000)
{
#Override
public void onTick(long millisUntilFinished)
{
element5.setVisibility(View.VISIBLE);
}
#Override
public void onFinish()
{
element5.setVisibility(View.GONE);
}
}.start();
} else if (data == 6)
{
CountDownTimer cdt = new CountDownTimer(2000, 1000)
{
#Override
public void onTick(long millisUntilFinished)
{
element6.setVisibility(View.VISIBLE);
}
#Override
public void onFinish()
{
element6.setVisibility(View.GONE);
}
}.start();
}
id = id + 1;
text.setText("cos " + id);
} while (id < 3);
All elements are being shown in the same time. And I try add
Thread.sleep(2500);
But this stoped the action in window. I try add this after code:
Timer timer = new Timer();
timer.schedule( new TimerTask() {
public void run() {
}
}, 0, 60*1000);
But loop wasn't stay. I try do it with notify() and wait(), but it also don't work.
Don't suggest me to do do next action in onFinish() because this must be repeat a lot.
Anybody have another idea?
EDIT
I also use Handler but it don't work
I would recommend you not to implement this code in the main thread.
Create an async task, which hides a button and on postExequte calls itself.

Checking if CountDownTimer is running

Ive been looking to see a method to see if a CountDownTimer is running or not, but I cant find a way to, any help would be greatly appreciated
if (position == 0) {
mCountDown = new CountDownTimer((300 * 1000), 1000) {
public void onTick(long millisUntilFinished) {
mTextField.setText("seconds remaining: "
+ millisUntilFinished / 1000);
}
public void onFinish() {
mTextField.setText("0:00");
String path = "/sdcard/Music/ZenPing.mp3";
try {
mp.reset();
mp.setDataSource(path);
mp.prepare();
mp.start();
} catch (IOException e) {
Log.v(getString(R.string.app_name),
e.getMessage());
}
}
}.start();
}
For that how can I check if mCountDown is currently running?
Just put a boolean flag which indicate that by following code
boolean isRunning = false;
mCountDown = new CountDownTimer((300 * 1000), 1000) {
public void onTick(long millisUntilFinished) {
isRunning = true;
//rest of code
}
public void onFinish() {
isRunning= false;
//rest of code
}
}.start();
onTick is your callback for a running process, you can either set a property to track the status.
isTimerRunning =false;
After start -> make it true;
Inside OnTick -> make it true (not actually required, but a double check)
Inside OnFinish -> make it false;
use the isTimerRunning property to track the status.
Check if the CountDownTimer is Running and also if the app is running in the background.
#Override
protected void onCreate(Bundle savedInstanceState) {
...
myButton.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
myButton.setText("Button clicked");
countDownTimer = new CountDownTimer( 3000, 1000) {
#Override
public void onTick(long millisUntilFinished) {
//After turning the Smartphone the follow both methods do not work anymore
if (!runningBackground) {
myButton.setText("Calc: " + millisUntilFinished / 1000);
myTextView.setText("Calc: " + millisUntilFinished / 1000);
}
}
#Override
public void onFinish() {
if (!runningBackground) {
//Do something
}
mTextMessage.setText("DONE");
runningBackground = false;
running = false;
}
};
//timer started
countDownTimer.start();
running = true;
}
});
}
#Override
protected void onResume() {
super.onResume();
runningBackground = false;
}
#Override
protected void onPause() {
runningBackground = true;
super.onPause();
}

CountDownTimer issue

Basically my aim is to have this timer reset whenever the user presses button b. I've tried a few methods such as if( i==true && bIsPressed()) but no luck, any ideas?
//2 buttons
Button =b;
TextView = time;
//countdown code
CountDownTimer Count = new CountDownTimer(11000, 1000) {
public void onTick(long millisUntilFinished) {
time.setText(""+millisUntilFinished / 1000);
}
public void onFinish() {
time.setText("Finished");
}
}; Count.start();
Haven't tested it, but I would do something along the lines of:
private void setupTimerResetButton()
{
mTimerResetButton.setOnClickListener(new OnClickListener(){
public void onClick(){
resetTimer();
}
});
}
private void resetTimer()
{
if(mTimer != null){
mTimer.cancel();
mTimer = null;
}
mTimer = new CountDownTimer(11000, 1000) {
public void onTick(long millisUntilFinished) {
mTimerTextView.setText(""+millisUntilFinished / 1000);
}
public void onFinish() {
mTimerTextView.setText("Finished");
}
};
mTimer.start();
}

Categories

Resources