1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

GPS Ortung in RemoteService

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von cdah, 30.01.2011.

  1. cdah, 30.01.2011 #1
    cdah

    cdah Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    06.05.2009
    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
     
  2. Bobert, 31.01.2011 #2
    Bobert

    Bobert Erfahrener Benutzer

    Beiträge:
    161
    Erhaltene Danke:
    15
    Registriert seit:
    21.11.2010
    Phone:
    Nexus S
    Hallo,

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


    Grüße Bobert
     
    Zuletzt bearbeitet: 31.01.2011
  3. cdah, 31.01.2011 #3
    cdah

    cdah Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    06.05.2009
    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:
     
  4. Bobert, 31.01.2011 #4
    Bobert

    Bobert Erfahrener Benutzer

    Beiträge:
    161
    Erhaltene Danke:
    15
    Registriert seit:
    21.11.2010
    Phone:
    Nexus S
    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
     
  5. cdah, 31.01.2011 #5
    cdah

    cdah Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    06.05.2009
    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
     

Diese Seite empfehlen