2016-06-23 12 views
0

Ich möchte Geschwindigkeit auf GPS im Hintergrund auf einem Programm erfassen. Ich habe den Code, um die Geschwindigkeit zu erfassen, aber es wird nicht funktionieren, es sei denn, es ist das erste, was im Programm läuft. Soll dies als Broadcast Intent oder Intent Service codiert werden, um danach eine Benachrichtigung zu erhalten?Capturing Speed ​​im Hintergrund der App

SpeedManagerService.java:

public class SpeedManagerService extends Service { 

private static final String TAG = "SpeedCheckerService"; 

private boolean isRunning = false; 

@Override 
public void onCreate() { 
    Log.i(TAG, "Service onCreate"); 

    isRunning = true; 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 

    Log.i(TAG, "Service onStartCommand"); 

    //Creating new thread for my service 

    new Thread(new Runnable() { 
     @Override 
     public void run() { 

      if (isRunning) { 
       Log.i(TAG, "Service running"); 
      } 
     } 

    }).start(); 

    return Service.START_STICKY; 
} 

@Nullable 
@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 
} 

Und dann habe ich die Absicht für diese bestimmte Seite unter der Splash-Seite hinzugefügt (unter der onCreate Methode ausgeführt werden soll, kurz bevor die Splash-Seite beginnt):

public class SplashActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.splash); 

Intent intent = new Intent(this, Checker.class); 
    startService(intent); 

Jede Hilfe wäre sehr willkommen. Vielen Dank.

+0

Ich würde empfehlen, einen Teil des Codes für Ihre Geschwindigkeitserfassung oder eine Darstellung der Konfiguration Ihrer Anwendung zu veröffentlichen; So können wir besser helfen. – Thomas

Antwort

1

Aus Ihrer Beschreibung scheint es, als könnten Sie die gesamte Arbeit im Service erledigen. Es wird die ganze Zeit laufen - Sie können einen separaten Thread für die Verwaltung der eingehenden Datenverarbeitung laufen lassen, Empfänger zur Laufzeit registrieren und die Registrierung aufheben und auch den Benutzer s0notify. Aus meiner Erfahrung ist es eine gute Idee, den Strom der Werte in reactove way (rx) zu behandeln - Sie erhalten Daten, übergeben sie an eine Kette von Operatoren (filtern nach Geschwindigkeitswert) und verarbeiten am Ende. IntentService ist besser geeignet für lange laufende einmalige Arbeit

+0

Danke, beide Antworten helfen. Hoffentlich kann ich das sortieren und starten. Schätze die Anleitung! – Angel

+0

Also wenn ich das richtig verstehe, kann ich eine Klasse hinzufügen, an die ein IntentService angehängt ist. Wenn die App startet, wird der Dienst im Hintergrund starten und den Code lesen, der die Geschwindigkeit lesen und erfassen muss, und Dann schicke eine Benachrichtigung mit? Ich werde einige der Code .. Wenn jemand mir mit dem Service helfen kann, würde ich es auch sehr zu schätzen wissen. – Angel

+0

Intent Service ausgeführt einmal und die Kündigung (siehe Dokumente) verwenden gewöhnlichen Service, der unabhängig und alle laufen wird Verarbeiten in es –

0

Sie sollten einen Service implementieren und Ihre Bedingungen darin einrichten. Für den Anfang gehen Sie durch diese Guide. Sie können die Funktion getSpeed ​​() in Ihrem Standortlistener aufrufen.