Android Timer im Service, vom Service Methoden aus Activity aufrufen

  • 7 Antworten
  • Letztes Antwortdatum
X

xxJayLxx

Neues Mitglied
0
Hallo allerseits,

Ich habe jetzt schon ganz viele Stunden damit verbraucht, heraus zu finden wie ich von einen Service Methoden aus einer Activity aufrufe.
Ich habe einen Timer programmiert. Aber ich habe schon bemerkt das ich es nicht auf normale Weise lösen kann wie zB.
Code:
MainActivity ma = new MainActivity();
ma.timer.setText("00:00:00");

sondern, dass ich mit einem Intent arbeiten muss.
Mein Problem ist aber, dass ich ja jedes mal bevor ich den Service aufrufe die Variablen im Bundle mit geben muss. Aber ich möchte ja Methoden aus der MainActivity aufrufen.

Ich habe im StackOverflow Forum auch schon eimal gefragt, bin aber noch ein paar Jahre jünger und verstehe nicht so genau was die meinen.

Android call methode in service from activity - Stack Overflow

Ich hoffe ihr versteht was ich machen will und könnt mir irgentwie helfen.

Vielen vielen Dank schoneinmal
xxJaylxx
 
Habe mit Service'n noch nie garbeitet. Allerdings verstehe ich nicht, warum du über einen Service eine Methode in der MainActivity aufrufen willst?!
Was ist denn dein Ziel? Das solltest du mal erklären.

Achja, die zweite Antwort von SO ist gut -> Android call methode in service from activity - Stack Overflow
 
Hallo,

danke für die schnelle Antwort.
Ich möchte eine Methode aus der MainActivity aufrufen, um die zeit anzeigen zu lassen.

Ein Beispiel aus der Service.class:
Code:
mycounter = new CountDownTimer(5000, 100){
            public void onTick(long millisUntilFinished) {
                //ma.timer.setText(ma.formatTime(millisUntilFinished+1000));
                //ma.builder.setContentText("Timer: " + ma.formatTime(millisUntilFinished+1000)); //update Timer
                //ma.notificationManager.notify(MainActivity.MY_NOTIFICATION_ID, ma.builder.build());
            }
Ich habe es als Kommentar geschrieben, weil es nicht funktioniert.

Ich möchte die Methode aus der MainActivity aufrufen um zB. die Methode timer.setText(0); aufrufen zu können, damit ich die Zeit im Textfeld ändern kann.

Mfg
 
du kannst nicht davon ausgehen, dass deine actitiy lebt, wenn der service läuft.

schick nen broadcast rüber.
 
swordi schrieb:
du kannst nicht davon ausgehen, dass deine actitiy lebt, wenn der service läuft.

Danke für diese Antwort! Hilft mir schonmal ein ganzes Stück weiter vom logischen her..
Ich wollte jetzt eine Long Variable von der Activity in den Service geben. Sie ist aber immer 0. Hier ist mein Code..

Activity:
Code:
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        waitingtime = 600000;
        service = new Intent(this, Timer.class);
        korb = new Bundle();
        korb.putLong("time", waitingtime);
        service.putExtras(korb);
    }
public void press(View view){
        startService(service);
}
Service:
Code:
public void onCreate() 
    {
          super.onCreate();
          ma = new MainActivity();
    }
    
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // Diese Methode wird beim Starten aufgerufen!
        extras = intent.getExtras();           
        waittime = extras.getLong("waitingtime");
        startService();
        return super.onStartCommand(intent, flags, startId);
    }
   
    
    public void startService()
    {
         //startet einen Timer
     }
 
du legst "time" in das bundle aber versuchst "waitingtime" rauszulesen, deshalb ist das immer nur.

und das new MainActivity() lässt du auch weg, Activities niemals mit new instanzieren
 
Vielen vielen Dank!
Das mit der long Variable funktioniert jetzt alles einwanfrei, nochmal danke sehr nach so vielen Stunden funktioniert es endlich! :scared:

Jetzt noch eine letzte Frage:

Wenn ich eine Activity niemals mit new instanzieren darf, wie kann ich sonst eine Methode aus der Activity aufrufen, wenn ich auch nicht davon ausgehen kann, dass die Activity immer lebt?
Mein Ziel ist es eigentlich nur die Zeit aus dem Service im UI anzuzeigen.
:confused2:
 
Bound Services | Android Developers

Das sollte dir helfen.

Acitivities direkt aufrufen funktioniert in den meisten Fällen schon nicht, weil wenn du die Activity mit new aufrufst die Activitiy quasi leer ist.
keine der "normalen" Activity Methoden wird funktionieren.
onCreate wird nicht aufgerufen. (ebenso keine der anderen methoden.)
findViewById dürfte immer null zurück geben etc.

Deswegen hast du auch niemals was davon eine Activity mit new aufzurufen.

Ich weiß auch nicht was du vor hast, evtl wäre auch ein AsyncTask richtiger für dich.
 

Ähnliche Themen

M
Antworten
21
Aufrufe
1.360
swa00
swa00
Mr-Fisch
Antworten
5
Aufrufe
966
migi01
migi01
Mr-Fisch
Antworten
8
Aufrufe
1.006
Mr-Fisch
Mr-Fisch
M
Antworten
9
Aufrufe
790
mkuz24
M
A
Antworten
5
Aufrufe
694
swa00
swa00
Zurück
Oben Unten