(Benötigt Basic4android v1.2 oder höher)
Bitte lesen Sie zuerst Services tutorial (englisch) oder Services Module (deutsch).
Der Sourcecode zu diesem Beispiel befindet am Ende.
Der Englische Originaltext.
Das Twitter Beispiel liest RSS feeds von einer spezifischen Anfrage (query) und zeigt das Resultat an:
Wenn man auf einen Eintrag klickt, der einen Link enthält, dann wird der Browser mit diesem Link geöffnet.
Wenn die "Update automatically" (automatisch Aktualisieren) Option aktiviert ist, wenn man eine Anfrage (query) übergibt, dann wird das Hintergrund-Service diese Anfrage alle 3 Minuten neu übergeben.
Dann, wenn die Activity sichtbar ist, wird sie aktualisiert, ansonsten wird eine Benachrichtigung in der Statusbar angezeigt die den Benutzer benachrichtet daß neue Einträge bereit sind.
Die neueste Nachricht wird angezeigt wenn der Benutzer das Nachrichtenfeld öffnet:
Die automatische Aktualisierung läuft solange bis der Benutzer die "Update automatically" Option desaktiviert.
Der Code besteht aus 3 Modulen:
- Main - die Hauptactivity
- RSSReader - das Service das die Rückgabe herunterladet und analysiert
- SavedTwits - Codemodul das die Twitliste verwaltet, sie in eine Datei speichert und sie zurück liest wenn sie wieder gebraucht wird.
Starten des Service erfolgt, wenn der Benutzer auf die Go-Taste drückt (oder auf der Tastatur auf die Done Taste drückt):
Bevor wir das Service starten, setzten wir zwei Prozess globale Variablen, die Anfrage (query) und ob der Benutzer eine automatische Aktualisierung wünscht.
Der Code in Service_Start ist:
Zuerst überprüfen wir ob wir eine andere Anfrage in den nächsten 3 Minuten planen müssen. Dies wird dazu führen, daß sich die Anfrage alle 3 Minuten selbst wiederholt (sie wird sich jedesmal selbst neu aufrufen).
Beachten Sie daß, wenn das Gerät inaktiv ist, die Aufgabe solange warten wird bis das Gerät wieder aktiv ist.
Dann übertragen wir HttpRequest und lesen asynchron die Daten (stream).
Es ist sehr wichtig zu verstehen daß der ganze Prozess irgendwann zerstört wird und nachher wieder neu erstellt wird wenn es Zeit zur nächsten Anfrage ist.
Das heißt daß jedes mal wenn die Activity inaktiv wird (paused) müssen wir den aktuellen Stand speichern. Später wenn die Activity wieder neu erstellt wird oder das Service erstellt wird können wir den Stand zurück lesen um richtig zu starten.
Ein Map Objekt zusammen mit File.ReadMap und File.WriteMap machen es viel einfacher den Stand zu speichern und zurückzurufen. Eine Map enthält Werte Paare, ein Schlüsselwort und sein Gegenwert
Wenn die Activity gestartet wird überprüfen wir ob es das erste mal ist. Das erstemal heißt, das erstemal seit dem Start des Prozesses der die Activity enthält.
Und Service_Create
...Und da wir über Twitter sprechen, seit Ihr Alle willkommen uns auf Twitter zu verfolgen.
Der Sourcecode:
TwitterDemo.zip (40.5 KB, 10 views)
Twitter.apk (122.9 KB, 4 views)
Bitte lesen Sie zuerst Services tutorial (englisch) oder Services Module (deutsch).
Der Sourcecode zu diesem Beispiel befindet am Ende.
Der Englische Originaltext.
Das Twitter Beispiel liest RSS feeds von einer spezifischen Anfrage (query) und zeigt das Resultat an:
Wenn man auf einen Eintrag klickt, der einen Link enthält, dann wird der Browser mit diesem Link geöffnet.
Wenn die "Update automatically" (automatisch Aktualisieren) Option aktiviert ist, wenn man eine Anfrage (query) übergibt, dann wird das Hintergrund-Service diese Anfrage alle 3 Minuten neu übergeben.
Dann, wenn die Activity sichtbar ist, wird sie aktualisiert, ansonsten wird eine Benachrichtigung in der Statusbar angezeigt die den Benutzer benachrichtet daß neue Einträge bereit sind.
Die neueste Nachricht wird angezeigt wenn der Benutzer das Nachrichtenfeld öffnet:
Die automatische Aktualisierung läuft solange bis der Benutzer die "Update automatically" Option desaktiviert.
Der Code besteht aus 3 Modulen:
- Main - die Hauptactivity
- RSSReader - das Service das die Rückgabe herunterladet und analysiert
- SavedTwits - Codemodul das die Twitliste verwaltet, sie in eine Datei speichert und sie zurück liest wenn sie wieder gebraucht wird.
Starten des Service erfolgt, wenn der Benutzer auf die Go-Taste drückt (oder auf der Tastatur auf die Done Taste drückt):
B4X:
Sub btnGo_Click
If EditText1.Text.Length = 0 Then
ToastMessageShow("Please enter your query.", True)
Return
End If
RssReader.Query = EditText1.Text
RssReader.shouldScheduleNextTask = chkAutomatic.Checked
StartService(RssReader)
End Sub
Der Code in Service_Start ist:
B4X:
Sub Service_Start
'schedule the next run in 3 minutes
If shouldScheduleNextTask Then
StartServiceAt("", DateTime.Now + 3 * DateTime.TicksPerMinute, False)
End If
Dim req As HttpRequest
req.InitializeGet(URL & su.EncodeUrl(Query, "UTF8"))
HC.Execute(req, 1)
End Sub
Beachten Sie daß, wenn das Gerät inaktiv ist, die Aufgabe solange warten wird bis das Gerät wieder aktiv ist.
Dann übertragen wir HttpRequest und lesen asynchron die Daten (stream).
Es ist sehr wichtig zu verstehen daß der ganze Prozess irgendwann zerstört wird und nachher wieder neu erstellt wird wenn es Zeit zur nächsten Anfrage ist.
Das heißt daß jedes mal wenn die Activity inaktiv wird (paused) müssen wir den aktuellen Stand speichern. Später wenn die Activity wieder neu erstellt wird oder das Service erstellt wird können wir den Stand zurück lesen um richtig zu starten.
Ein Map Objekt zusammen mit File.ReadMap und File.WriteMap machen es viel einfacher den Stand zu speichern und zurückzurufen. Eine Map enthält Werte Paare, ein Schlüsselwort und sein Gegenwert
Wenn die Activity gestartet wird überprüfen wir ob es das erste mal ist. Das erstemal heißt, das erstemal seit dem Start des Prozesses der die Activity enthält.
B4X:
Sub Activity_Create(FirstTime As Boolean)
If FirstTime Then
'load previous values if file exists
If File.Exists(File.DirInternal, "state.txt") Then
state = File.ReadMap(File.DirInternal, "state.txt")
Log(state)
Else
state.Initialize
End If
End If
Activity.LoadLayout("1")
'load the previous state or set the defaults if this is the first time.
'GetDefault returns the stored value or the second parameter if the key was not found.
EditText1.Text = state.GetDefault("EditText1", "#android")
chk
B4X:
Sub Service_Create
If Query = "" Then
'no query means that the process was killed.
'so we load the query from the state file saved by the activity.
Dim state As Map
state = File.ReadMap(File.DirInternal, "state.txt")
Query = state.Get("EditText1")
Log("Loading query from file.")
End If
...Und da wir über Twitter sprechen, seit Ihr Alle willkommen uns auf Twitter zu verfolgen.
Der Sourcecode:
Twitter.apk (122.9 KB, 4 views)
Last edited: