App für Datenerfassung von Schrittsensoren im Hintergrund benötigt

  • Nach dem ich mich jetzt über einige Wochen hier im Forum und in Tutorials eingelesen habe, komme ich mal mit einer Frage auf euch zu. Ich bin mit Java halbwegs vertraut, jedoch mit Android nicht wirklich. Das habe ich jetzt versucht zu ändern in den letzten Wochen. Habe bisher 1-2 Activity-Apps gebastelt. Ich brauche jedoch jetzt für ein Uni Projekt eine App die Bewegungsdaten erfassen und speichern kann. Wichtig, ich brauche die Bewegungsdaten. Ohne die kann ich nicht weiter arbeiten.


    Grundsätzlicher (gewünschter) Ablauf in der App

    • Proband startet das Testgerät (Android 4.4.2+)
    • Proband startet App "Experiment"
    • Proband bekommt eine Willkommensnachricht und einen Button gezeigt
    • Er drückt auf Start - die Erfassung beginnt
    • Er schaltet das Gerät in den Standby Modus und steckt es in die Tasche
    • Am Ende des Experiments drückt er Stop


    Ablauf Erfassung/Service:

    • Es wird ein SensorManager genutzt mit Sensor.TYPE_STEP_COUNTER
    • Bei jedem Bewegungs Event wird der aktuelle Wert in eine Variable geschrieben.
    • Der Service ruft in einem Intervall (30 Minuten) eine Berechnungsroutine auf.
    • Die Routine berechnet Endwert-Anfangswert, speichert diesen Wert.
    • Anhand des Wertes aus vorangegangener Berechnung wird eine Benachrichtigung erstellt, die jeweils den Wert und einen Inhalt dynamischen Inhalt anzeigt.
    • Die Werte: Anfang, Ende, Differenz, Zeitstempel werden in eine TXT Datei geschrieben
    • Reset des Anfangswert, damit neuer Berechnungszeitraum stattfinden kann.


    Als Bonus könnte man die Schritte im letzten Zeitraum seit dem letzten "Start" in der Activity anzeigen. In einem Diagram oder so. Aber ist kein muss.
    ---

    Nun würde ich gerne von euch wissen, wie würdet ihr an so ein Projekt gehen. Mit den nachfolgend genannten Komponenten habe ich schon bereits erfolgreich experimentiert. AlarmManger wirft einen Alarm, Notification konnte gesetzt werden. SensorManager mit EventListener bekommt Werte aus den Schritten. Alles habe ich in einer one Activity App mit Buttons und Methoden am laufen. Nur jetzt kommt der nächste Schritt zum Hintergrundservice. Dass die Werte auch immer aufgezeichnet werden, selbst wenn die App geschlossen ist, den so wie ich das gelesen/entdeckt habe, ist mein Zähler nicht mehr aktiv sobald die Activity nicht mehr aktiv ist/oder das Gerät in den Standby geht.


    Welche Activities, Klassen, Methoden, Services würdet ihr anlegen? Wo Werte speichern damit ich sie von überall aus aufrufen kann.


    Wie verbinde ich diese Komponenten am sinnvollsten ?
    AlarmManager
    Service
    SensorManager
    Sensor.TYPE_STEP_COUNTER

    Zeitaufwand
    Was schätzt ihr bis wann man so eine App umgesetzt haben kann?

    Was ich bisher habe...
    https://www.dropbox.com/s/fsqan8zl95n2g5a/screen.png


    Als Dankeschön für eine ausführliche Antwort (vielleicht auch mit einem Klassendiagramm), werde ich demjenigen gerne etwas Gutes tun.

  • Hi Julian,


    ich würde in die Activity den AlarmManager packen und dann den Service aufbauen mit drücken des Start-Buttons mit den step Managment (Manager und Sensorauslese) starten. Dann musst du alle 30 Min, wenn der Alarm losgeht theoretisch nur den Service neu starten. Im Service machst du dann als letzte aktuelle Aufgabe das schreiben in die Datei.


    Ein Beispiel:http://stackoverflow.com/quest…d-alarmmanager-or-service


    Eine Notification würde ich auch in der Activity machen.


    Aufwand: kommt auf deine Erfahrung an. Mit dem Beispiel dürfte es relativ gut und zeitnah umsetzen lassen. ;)


    P.S.: Klassendiagramm kann ich dir von meinem Handy leider nicht liefern. In dem Fall wäre ein Sequenzdiagramm denk ich außerdem angebrachter :D

    MfG,
    Christopher


    Eine gewisses Maß an Freundlichkeit kann man auch von Menschen im Internet erwarten.
    Das Forum basiert komplett auf der Freiwilligkeit ihrer Nutzer und diese sollen sich wohlfühlen! Daher seid bitte freundlich. Danke

    Einmal editiert, zuletzt von Kogoro-Christopher ()

  • Hi Julian,


    das ist ja eine nette Denksportaufgabe für zwischendurch. ^^


    Also zunächst würde ich auf den AlarmManager verzichten. Der ist (wie der Name schon sagt) für Alarme zuständig.
    Statt diesem solltest Du eher auf einen Timer zurückgreifen.
    Ein Timer lässt sich mit einer Vorlaufzeit und einem Intervall konfigurieren, so dass der mit dem Timer verbundene Task (relativ) regelmäßig zur selben Zeit ausgeführt wird.


    Mit diesem Task wird Deine Messung erst einmal nicht weiter beeinflusst, so dass der zeitliche Verlust überschaubar ist.


    –––


    Wie würde ich an so ein Projekt gehen…
    Ich würde mich von der technischen Seite nähern. (Andere würden bei der UI-Seite loslegen.)
    Erst einmal das Grundlegende in der Main Activity zusammenklöppeln. Ohne UI, Buttons etc, einfach die Startroutine in die onCreate() und die Stoproutine in die onDestroy().
    Also den Manager, den Listener, den Timer.
    Vielen einzelne Unit Tests, einer je Komponente, wären auf jeden Fall meine erste Anlaufstelle.
    Da würde ich erst einmal 4 Stunden für veranschlagen. Es kommt nämlich immer irgendwas dazwischen…


    Wenn das alles zur Zufriedenheit läuft, würde ich den Start- und Stoppkrams in einen gestarteten (nicht gebundenen) Hintergrundservice auslagern.
    Diese Änderung sollte Deine Unit Tests nicht beeinflussen. Falls doch hast Du sie wohl falsch geschrieben. ;)
    Noch mal großzügig 2 Stunden für veranschlagt, bis auch das so richtig zuverlässig läuft.


    Anschließend kannst Du Dich dann um das UI kümmern. Bei einem Button und einer Notification ist das in einer Stunde durch.
    In hübsch, animiert, auf unterschiedliche Geräte optimiert, mit Parser für die Textdatei um einen Verlauf anzuzeigen, mit graphischer Darstellung dieses Verlaufs, mit Export- und Sharemöglichkeiten, mit hübscher Anbindung an die Google Play Services und dem Ausdenken von Achievements sowie einer Weltrangliste, Internationalisierung in 28 Sprachen mit entsprechenden Graphiken und vielen UI- und Integration Tests kannst Du dafür aber auch locker 40 Stunden verbraten. It depends.


    Ein Bekannter zitierte seinen IT-Prof mit folgenden Worten:

    Zitat

    Mit ausreichenden Tests, guter Dokumentation und geschickt geplantem Marketing dauert auch ein 'Hallo Welt' gut und gerne drei Wochen."

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!