Autore Topic: CountDownTimer si azzera quando viene ricreata l'Activity  (Letto 320 volte)

Offline Renzo

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Huawei 8 lite
  • Sistema operativo:
    Win 10
CountDownTimer si azzera quando viene ricreata l'Activity
« il: 08 Aprile 2016, 22:41:59 CEST »
0
Ciao a tutti, ho iniziato da poco a programmare in Java , ho un problema che non riesco a risovere nonostante tutti i blog che ho letto in merito.
devo semplicemente creare un coundowntimer che ad ogni "onTick" di un secondo, mi aggiorna una TextView ed alla fine onFinish() fa partire una musica che avverte che il conto alla rovescia è terminato.
Purtroppo però quando faccio ruotare il telefono, premo il pulsante "indietro" o salto da un'app ad un'altra, l'activity si ricrea e la TextView si ferma nonostante il timer vada avanti, infatti allo scadere del tempo  il brano scelto esegue il play.
Ho visto alcuni post che parlano di handler, application ma purtroppo non riesco a collegare l'esecuzione del programma con le TextView dell'Activity.
Per semplicià posto solo una parte dell'intero programma , in pratica premendo start parte un tempo di 20 secondi ed alla fine viene eseguito il brano stayin_alive dei Bee Gees ,da questo capite che non ho proprio vent'anni! )-:
posto la mainActivity.java , l'Activity_main ed il manifest,
Probabilmente è una cosa semplicissima ma non rieco a risolvere.
grazie a tutti
Renzo.

MainActivity

package com.renzo.timer_16;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Vibrator;
import android.media.MediaPlayer;
import android.widget.Button;
import android.widget.EditText;
import android.os.CountDownTimer;
import android.view.View;
import android.view.View.OnClickListener;
import java.util.concurrent.TimeUnit;

public class MainActivity extends Activity {
    //Declare a variable to hold count down timer's paused status
    private boolean isPaused_1 = false;
    //Declare a variable to hold count down timer's paused status
    public MediaPlayer mediaPlayer_1;
    //Declare a variable to hold CountDownTimer remaining time

    long millis_1,millisec_1,secondi_1,minuti_1,ore_1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //final Button btnRestart = (Button) findViewById(R.id.btn_restart);
        final Button btnEsci = (Button) findViewById(R.id.btn_esci);

        //findView per Timer 1
        final Button btnStart_1 = (Button) findViewById(R.id.btn_start_1);
        final Button btnCancel_1 = (Button) findViewById(R.id.btn_cancel_1);
        final EditText tempo_sec_1 = (EditText) findViewById(R.id.ET_sec_1);
        final Vibrator vibra_1 = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
        mediaPlayer_1 = MediaPlayer.create(this, R.raw.stayin_alive);

        // Istruzioni relative a Timer 1

        btnStart_1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                millisec_1 = 20000;
                CountDownTimer timer_1;
                //Initialize a new CountDownTimer instance
                timer_1 = new CountDownTimer(millisec_1, 1000)  {
                    public void onTick(long millisUntilFinished) {
                        //do something in every tick
                        {
                            millis_1 = millisUntilFinished;
                            String Ore_vis_1 = String.format("%02d", TimeUnit.MILLISECONDS.toHours(millis_1));
                            String Min_vis_1 = String.format("%02d", TimeUnit.MILLISECONDS.toMinutes(millis_1) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis_1)));
                            String Sec_vis_1 = String.format("%02d", TimeUnit.MILLISECONDS.toSeconds(millis_1) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis_1)));
                            tempo_sec_1.setText(Sec_vis_1);
                        }
                    }
                    public void onFinish() {
                        long[] pattern = {0, 1000, 1000};
                        //Do something when count down finished
                        tempo_sec_1.setText("00");
                        vibra_1.vibrate(pattern,0);                        ;
                        mediaPlayer_1.start();
                    }
                }  .start();

            }
        });
        //Set a Click Listener for cancel/stop button
        btnCancel_1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                //When user request to cancel the CountDownTimer
                tempo_sec_1.setText("00");
               // secondi_1 = minuti_1 = ore_1 = 0;
                millis_1=0;
                mediaPlayer_1.pause();
                mediaPlayer_1.seekTo(100);
                vibra_1.cancel();
            }
        });
        // Fine Istruzioni relative a Timer 1
        btnEsci.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                System.exit(0);
            }
        });

    }
}


Activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    tools:context=".MainActivity"
    android:clickable="false"
    android:background="#19f416">

            <EditText
            android:layout_width="80dp"
            android:layout_height="70dp"
            android:inputType="number"
            android:id="@+id/ET_sec_1"
            android:text="00"
            android:textSize="50dp"
            android:gravity="center_vertical|center_horizontal"
            android:layout_marginTop="60dp"
            android:textStyle="bold"
            android:layout_marginLeft="170dp" />

    <Button
            android:layout_width="110dp"
            android:layout_height="40dp"
            android:text="START"
            android:id="@+id/btn_start_1"
            android:textSize="18dp"
            android:layout_marginTop="55dp"
            android:layout_marginLeft="260dp"
            android:layout_alignParentBottom="false"
            android:textStyle="bold"
            android:layout_alignParentStart="true" />

        <Button
            android:layout_width="110dp"
            android:layout_height="40dp"
            android:text="STOP"
            android:id="@+id/btn_cancel_1"
            android:textSize="18dp"
            android:layout_marginTop="100dp"
            android:layout_marginLeft="260dp"
            android:textStyle="bold"
            android:allowUndo="true" />


    <Button
        android:layout_width="150dp"
        android:layout_height="50dp"
        android:text="Esci"
        android:id="@+id/btn_esci"
        android:layout_column="20"
        android:textSize="20dp"
        android:layout_marginTop="300dp"
        android:layout_marginLeft="100dp"
        android:allowUndo="true" />

</RelativeLayout>


AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.renzo.timer_16">
    <uses-sdk
        android:minSdkVersion="3"
        android:targetSdkVersion="15" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

Offline tonno16

  • Utente storico
  • *****
  • Post: 1188
  • Respect: +57
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:CountDownTimer si azzera quando viene ricreata l'Activity
« Risposta #1 il: 09 Aprile 2016, 12:39:14 CEST »
0
Devi gestire la rotazione dello schermo. Tipo inserendo onConfigurationChanged nel manisfet.

Offline Renzo

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Huawei 8 lite
  • Sistema operativo:
    Win 10
Re:CountDownTimer si azzera quando viene ricreata l'Activity
« Risposta #2 il: 09 Aprile 2016, 23:40:15 CEST »
0
grazie per la risposta, avevo già pensato alla soluzione che mi hai proposto ma pensavo che riguardasse solo la rotazione dello schermo , il problema però c'è anche quando si preme il pulsante indietro o quando passo da un'app ad un'altra.
adesso vedo come posso utilizzare questo metodo e ti faccio sapere.
grazie ancora
Renzo.