Verwendung einer View in einem Service

K

korndi

Neues Mitglied
3
Hallo.

Ich habe ein TimerService und möchte gerne in der onTick Methode in einem Chronometer die Zeit herunterzählen. Ohne Service hat es bestends geklappt.

Mein Code

Aufruf:
Code:
 Intent i  = new Intent(Timer.this,TimerService.class);
            i.putExtra("ms", ms);
            startService(i);
Service:

Code:
public class TimerService extends Service{

    CountDownTimer timer;
    Chronometer clock;
    @Override
    public IBinder onBind(Intent intent) {

        return null;
    }
    public void setClock (Chronometer cron)
    {
        this.clock = cron;
    }
    @Override
    public void onStart(Intent intent, int startId) {
        // TODO Auto-generated method stub
        int ms = intent.getIntExtra("ms", 0);

        timer = new  CountDownTimer(ms,1000){
            @Override
            public void onTick(long millisUntilFinished) {

                int seconds = (int) (millisUntilFinished / 1000) % 60 ;
                int minutes = (int) ((millisUntilFinished / (1000*60)) % 60);
                int hours   = (int) ((millisUntilFinished / (1000*60*60)) % 24);

                clock.setText( String.format("%02d:%02d:%02d", hours,minutes,seconds));
                Log.e("Timer", String.valueOf(millisUntilFinished));

            }

            @Override
            public void onFinish() {
                // TODO Auto-generated method stub

            }
        }.start();
        super.onStart(intent, startId);
    }

Wie kann ich den Chronometer in meine Service ansteuern?

danke

Danke
 
Aus dem Service heraus solltest du das eher nicht tun: der Service (liegt in der Natur von einem Service) kann unabhängig von jeglicher UI laufen, d.h. es ist nicht garantiert, dass es irgendwelche grafischen Elemente gibt, die du aktualisieren kannst.

Es gibt zwei (bestimmt noch mehr ^^) Lösungswege:
Du benutzt einen Broadcast Receiver in der Activity, welcher die Änderungen, die vom Service kommen entgegennimmt und diese in der UI anzeigt - oder
du gehst über die "Application" - also nimmst eine Klasse die davon erbt. Diese existiert quasi immer (also der Context der Application, auch wenn "nur" der Service läuft) - und deligierst von da aus die Änderungen an die Activity weiter, die die UI Elemente enthält.
 

Ähnliche Themen

D
  • Data2006
Antworten
14
Aufrufe
483
jogimuc
J
OnkelLon
Antworten
13
Aufrufe
1.973
OnkelLon
OnkelLon
Zurück
Oben Unten