GPS Ortung in RemoteService

C

cdah

Neues Mitglied
0
Hallo zusammen

Ich bin an meinem ersten Andriod-App, und versuche die GPS-Position in einem RemoteService zu bekommen.

Dies geht allerdings nur in einem "Looper-Thread" ??
Wie mach ich denn aus meinem Service einen Looper-Thread?

(Ich möchte nicht nur den Code, etwas Hintergrund wieso und warum wär nicht schlecht!)

Aber eigentlich bin ich um jede Hilfe dankbar!


Gruss
cdah
 
Hallo,

schau mal hier!
Und "wieso und warum" mhhh hilft Dir das weiter?


Grüße Bobert
 
Zuletzt bearbeitet:
Hi Bobert

Danke für deine Hilfe. Die Beschreibung des Loopers hab ich gefunden. Ich glaube mittlerweile, mein Gedankenknoten ist an einem anderen Ort...

Also etwas mehr Infos:
Ich bin neu in der Android-Entwicklung, und hatte die (glorreiche:blink:) Idee, als erstes "Sinnvolles Test-Projekt" einen Tracker zu basteln. (Da gibts Netzwerk, Activities, Services, Callbacks, undundund...)

Der Tracker wird über eine Activity gestartet. Soll aber im Hintergrund auch weiterlaufen, wenn der User eine andere App am laufen hat.
Meine Idee war, einen RemoteService zu erstellen, welcher dann einen weiteren Thread für die Netzwerk-Kommunikation startet. Der Haupt-Thread soll sich beim LocationManager anmelden, und die erhaltenen Positionen einerseits in einer ConcurrentLinkedQueue speichern (wo der Netzwerk-Thread sie dann verarbeitet), und mittels Callbacks an das UI weiterleitet.
Der Main-Thread des RemoteService soll also gar nicht in einer Endlos-Schleife stecken. ;)

Code kurz zusammengefasst:
Code:
public class TrackerServiceImpl extends Service {
    private ConcurrentLinkedQueue<GpsPoint> positionQueue = new ConcurrentLinkedQueue<GpsPoint>();

    private LocationManager locationManager;
    private LocationListener locationListener;

    public void onCreate() {
        super.onCreate();
        locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        locationListener = new MyLocationListener();
    }

    private void startTracker() throws RemoteException {
        new Thread(networkService).start();
        locationManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER,
                0, 0,
                locationListener);
    }

    private class MyLocationListener implements LocationListener {
        public void onLocationChanged(Location location) {
            if (location != null) {
                GpsPoint point = new GpsPoint(location, 0);
                positionQueue.add(point);   // für Netzwerk-Thread
                updatePosition(point);    // Callback für Activities
            }
    }
}
Wieso benötige ich hier trotzdem einen Looper? Ich will ja gar keine Schleife?:sneaky:
 
Hallo,

als erstes, möchte ich mal wissen was Du dir unter einen "RemoteService" vorstellst!

"Meine Idee war, einen RemoteService zu erstellen, welcher dann einen weiteren Thread für die Netzwerk-Kommunikation startet."
Wo genau soll der RemoteService laufen?

Was stimmt an dem Code nicht?

Gruß Bobert
 
So wie ich das verstanden habe, ist ein RemoteService ein Service, welcher in einem eigenen Prozess gestartet wird, und somit die Laufzeit der Activities überleben kann.

Der Service soll sich beim LocationManager anmelden, und jeweils bei einer Bewegung (LocationChange) dei aktuelle Position in seiner Queue speichern.


Was genau an dem Code nicht stimmt verstehe ich eben nich so recht...
Es heisst, dass man requestLocationUpdates nur in einem Looper-Thread ausführen darf.

Was ich jedoch nicht verstehe:
mit requestLocationUpdates setze ich doch ein Callback. Wieso muss dies in einer Schleife (Looper) geschehen?Das macht doch keinen Sinn?!
Danke aber schonmal für die Antwortversuche bis jetzt! ;)

Gruss
cdah
 

Ähnliche Themen

D
Antworten
23
Aufrufe
2.538
Data2006
D
H
Antworten
2
Aufrufe
930
swa00
swa00
OnkelLon
Antworten
13
Aufrufe
1.983
OnkelLon
OnkelLon
Zurück
Oben Unten