1. Nimm jetzt an unserem Geotel Note - Gewinnspiel teil - Informationen zum Note findest Du hier!
  1. tar, 08.03.2011 #1
    tar

    tar Threadstarter Neuer Benutzer

    Hallo Leute!

    Ich schreibe gerade eine Anwendung, bei der ich eine Kommunikation zwischen Service und Activity benötige. Wenn die Activity den Service anspricht, ist das kein Problem. Ich möchte das jedoch umgekehrt umsetzen. Der Service kommuniziert periodisch mit einem Webserver und falls dabei ein bestimmtes Ereignis eintritt, soll der Service die Activity darueber benachrichtigen.

    Ich hatte jetzt vor, dass der Service einen Broadcast losschickt und die Activity von einem BroadcastReceiver benachrichtigt wird. Allerdings wird anscheinen bei jedem Broadcast eine neue Instanz des BroadcastReceivers gestartet (ist das wirklich so?), so dass der BroadcastReceiver nicht meine Activity ansprechen kann, weil ich sie ihm garnicht kenntlich machen kann.


    Habt ihr eine Idee wie man die Kommunikation Service zu Activity umsetzt?

    ~Tobias
     
  2. Unicate, 09.03.2011 #2
    Unicate

    Unicate Android-Experte

    Also eigentlich sollte nicht bei jedem Broadcast eine neue Instanz des Receivers erstellt werden. Wenn du das so gecoded hast, ist das ungünstig um nicht falsch zu sagen.

    Ich habe meine Service's immer per Callback mit den Activities kommunizieren lassen, das ging auch immer ganz gut.
     
  3. tar, 09.03.2011 #3
    tar

    tar Threadstarter Neuer Benutzer

    Danke fuer deine Antwort, auch wenn sie... hm... mich verwirrt.

    Mit welchem Callback ist das denn möglich oder hast du da vielleicht sogar ein Beispiel?


    ~Tobias
     
  4. Unicate, 09.03.2011 #4
    Unicate

    Unicate Android-Experte

    Im Moment hab ich mein Vorzeigebeispiel nicht hier. Den Callback musst du natürlich erst erstellen...

    Ich werde mal ein Tutorial dazu schreiben... nicht heute, aber demnächst.

    Man muss der AIDL Datei welche man für die Richtung Activity=>Service erstellt hat um 2 Methoden erweitern

    PHP:
    interface ServiceBinder {

        
    void registerCallback(ServiceCallback callback);
        
    void unregisterCallback();
        
    ....
    }
    und eine weitere AIDL für diesen ServiceCallback schreiben.

    Beim binden der Activity an den Service dann darauf achten, das man diese Methode aufruft und das implementierte Interface des Callbacks dann registriert (mit registerCallback aus deiner ServiceBinder.aidl)

    Dann kann man dieses interface im Service selbst verwenden und einfach aufrufen.

    Ich hoffe das war verständlich genug.
     
  5. tar, 09.03.2011 #5
    tar

    tar Threadstarter Neuer Benutzer

    Ok, ich hab AIDL mal kurz ueberflogen und ich glaube auch, dass es damit geht.

    Bin dann jedoch auf etwas anderes gestoßen, was meine urspruengliche Idee zum Laufen bringt. Und zwar war ja mein eigentliches Problem, dass bei jedem Broadcast eine neue Instanz des BroadcastReceivers gestartet wird. Dies ist aber nur so, falls man den Receiver ueber die Manifest-Datei registriert. Falls man das programmatisch ueber registerReceiver() macht, ist der Receiver fest an eine Activity gebunden.

    ~Tobias