Cześć 🙂
Jestem trochę w desperacji i próbowałem juz wielu rozwiązań,ale żadne nie spełnia moich oczekiwań, chciałbym by w Activity odpowiadającym za Timer po naciśnięciu klawisza onBack i powrocie znowu czas nadal płynął. Nie chcę pauzować tego czasu oczekiwania (Czyli rozwiazanie by w CountDownTImer puszczać cancel i upłynięty czas puszczać do Bundle i potem przywracać od tej pauzy). ten czas nadal sobie płynie, tylko nie wiem jak się dobrać do tego płynącego czasu w chronometrze, gdy wracam znowu do tego okienka. Bo aktualnie to wygląda to tak, że właczam sobie odliczanie, wycofuje się do menu, wracam mam nowy timer i mogę ustawić nowy timer, a tamten stary gdzieś sobie w tle płynie i mogę sobie tak zafloodować timera, nie chcę takiego czegoś, chcę przywracać ten płynąc w tle. Siedzę nad tym od dwóch dni i próbowąłem już masy rozwiązań, czy różnych dziwnych pomysłów, mógłbym prosić o jakąś sugestie ?
public class Timer extends Activity {
...
private void initTimerButton() {
this.hour = ((NumberPicker) findViewById(R.id.hour));
hour.setMaxValue(24);
hour.setMinValue(0);
hour.setWrapSelectorWheel(true);
this.minutes = ((NumberPicker) findViewById(R.id.minute));
minutes.setMaxValue(59);
minutes.setMinValue(0);
minutes.setWrapSelectorWheel(true);
this.seconds = ((NumberPicker) findViewById(R.id.second));
seconds.setMaxValue(59);
seconds.setMinValue(0);
seconds.setWrapSelectorWheel(true);
}
....
private void initCountDown() {
count = new MyCountDownTimer(max, min);
blockScroll(false);
count.start();
}
....
private void initStartButton() {
startB = ((ImageButton) findViewById(R.id.start_pause));
startB.setBackgroundResource(R.drawable.start_button);
startB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
start = !start;
if (start) {
setMinMax();
if (checkRange()) {
// startActivity(login);
initCountDown();
startB.setBackgroundResource(R.drawable.stop_button);
// ekran logowania
} else {
startB.setBackgroundResource(R.drawable.start_button);
start = false;
}
} else {
end();
count.cancel();
}
}
});
.....
@Override
protected void onCreate(Bundle savedInstanceState) {
// login = new Intent(Timer.this, LoginActivity.class);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_timer);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
// Show the Up button in the action bar.
getActionBar().setDisplayHomeAsUpEnabled(true);
}
initTimerButton();
initStartButton();
}
....
// Klasa MyCountDownTimer zawiera się w klasie Timer
class MyCountDownTimer extends CountDownTimer {
/**
*
* @param startTime
* start
* @param interval
* end of range
*/
public MyCountDownTimer(long startTime, long interval) {
super(startTime, interval);
}
/**
* @param onFinish
* () Init finish method when the time is stoped
*
*/
@Override
public void onFinish() {
end();
start = false;
LoginActivity._finish();
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
v.vibrate(VIBRATION_TIME);
}
/**
* @param onTick
* (long milisUntilFinished) update a time
*/
@Override
public void onTick(long millisUntilFinished) {
long tmp = millisUntilFinished / 1000;
int second = seconds.getValue() - 1;
int minute = minutes.getValue();
int hours = hour.getValue();
if (second == -1) { // jesli przebilismy licznik sekundy
if (minute > 0) { // obnizamy minute i licznik na 59 sekund
second = 59;
--minute;
} else { // sprawdzamy godzine lub zerujemy
second = 0;
if (hours > 0) {
hours--;
minute = 59;
} else
minute = 0;
}
}
seconds.setValue(second);
minutes.setValue(minute);
hour.setValue(hours);
}
}
}
Manifest
<activity
android:name="com.example.timer.Timer"
android:launchMode="standard"
android:screenOrientation="portrait" >
</activity>
<activity
android:name="com.example.user_access.LoginActivity"
android:label="@string/title_activity_login"
android:launchMode="singleInstance"
android:screenOrientation="portrait"
android:theme="@style/Theme.Transparent"
android:windowSoftInputMode="adjustResize|stateVisible" >
</activity>
Będę wdzięczny za jakiekolwiek sugestie i pomoc 😉