Kommunikation von Service auf Activity !

K

KianS

Neues Mitglied
0
Hi zusammen,

ich öffne mal hier ein neues Thread , da ich probleme habe mit der Kommunikation zwischen "Service" zur "Activity"

was habe ich :
Ich habe ein Download einer FTP Datei, die im Hintergrund als Service runtergeladen wird! am ende habe ich eine Zeit X in einer Variabel.
desweiteren wird geprüft ob die Datei auch vollständig geladen wird indem ich ein einfachen Vergleich der Datengröße mache.


also ich habe eine Zeit 0s"anfangszeit" 12:22:00 die bis z.B. 20sek geht "endzeit" 12:22:20
und eine Download Größe die von 0Kb bis 5000Kb geht.

Diese Werte werden im Service festgelegt.


Vorhaben:

Ich möchte dies Grafisch im GUI der Activity anzeigen lassen.


Dateidownload zeit : X sekunden
X sekunden , soll nach und nach abgetastet werden und dynamisch angezeigt werden. 1. sec , 2, sec ...... 20 sec.

Download traffic : X kb of 5000 kb


Download rate soll angezeigt werden : 0kb, 250 kb, 500 kb ..... 5000 kb .




Nun meine Frage :

wie mache ich das, das der Service diese Werte an die Activity weitergibt !
und wie kann ich es in der activity "dynamisch und automatisch" anzeigen lassen.




Ich danke jedem der mir hilft.
 
Probiere es mal mit der ProgressBar oder ProgressDialog.

Diese Elemente kannst du nach deinen Wünschen modifizieren und auch dynamisiern. Zusätzlich wird das ganze in einen Thread ausgelagert, damit auch deine GUI während des Ladens ansprechbar bleibt.

Auf der Developer.Google Seite findest du einige gute Beispiele. Hier im Forum bestimmt auch.

Dies ist nur ein Vorschlag.
 
Also ich würde das mit einem normalen Callback machen.
Dazu sind die doch da oder?

Das hier in deine Service AIDL damit du den Callback in deinem Service registrieren kannst.
Code:
     void registerCallback(ServiceCallback callback);
     void unregisterCallback();
Dann noch eine AIDL für den Callback erstellen:

Sowas in der Richtung:
PHP:
interface ServiceCallback {
    
    void updateProgress(long progress);
}
Dann ServiceCallback in deiner Activity implementieren
und nach dem der Service verbunden ist den callback registrieren. bei disconnect, natürlich wieder "unregistern"

Die ServiceConnection der Activity sieht dann in etwa so aus:
PHP:
    private ServiceConnection _connection = new ServiceConnection() {
        
        @Override
        public void onServiceDisconnected(ComponentName arg0) {
            if(null != _service) {
                try {
                    _service.unregisterCallback();
                } catch (RemoteException e) {}
                _service = null;                
                Log.d(TAG, "Service disconnected!");
            }
        }
        
        @Override
        public void onServiceConnected(ComponentName arg0, IBinder service) {
            if(service != null && null == _service) {
                _service = ServiceBinder.Stub.asInterface(service);
                Log.d(TAG, "Service connected!");
                try {
                    _service.registerCallback(_callback);
                } catch (RemoteException e) {
                    Log.w(TAG, e);
                }
            }
        }
    };

Hab ich jetzt auch nur von meiner App kopiert, funktioniert da aber bestens.

Wenn ich zu hause bin könnte ich dir mal meinen "VanillaRemoteService+Callback" schicken, da sind nur Service und Callback implementiert
 
Zuletzt bearbeitet:
dankeschön
 

Ähnliche Themen

M
Antworten
4
Aufrufe
1.173
swa00
swa00
M
  • MikelKatzengreis
Antworten
5
Aufrufe
132
swa00
swa00
Zurück
Oben Unten