Beiträge von Marco Feltmann

    Du meine Güte, genauer als eine Schritt-für-Schritt Anleitung geht es nun wirklich nicht…


    Also, noch einmal und ganz von vorn:


    In den Einstellungen steht das Gerät auf 'Stromsparmodus', das bedeutet: ausschließlich Wifi und Mobilfunknetz.
    Wenn ich dann picoPark starte, habe ich eine Genauigkeit von ungefähr 15 bis 30 Metern im Büro.
    Verlasse ich das Büro in Richtung Park, springt die Genauigkeit auf Werte jenseits der 700 Meter.
    Das ist okay, das ist verständlich, das sehe ich ein, das ist kein Problem.


    Ich verlasse also die App, gehe ins Einstellungsmenü und stelle den Standortmodus auf 'Hohe Genauigkeit'.
    Dies ist die stromfressendste Option, da neben GPS auch Wifi und das Mobilfunknetz benutzt wird.
    Ich gehe zurück in picoPark und an der Genauigkeit ändert sich auch nach mehreren Minuten überhaupt nichts.


    Meine Vermutung hierbei ist, dass das Corona SDK beziehungsweise der generierte Code da nicht so 100%ig sauber arbeitet.
    Eventuell registriert sich das Ganze nur für die aktuell zur Verfügung stehenden Listener anstatt die vom System zur Verfügung gestellten abstrakten Listener zu benutzen.


    Soll heißen: beim Start der App zieht sie sich alle aktuell zur Verfügung stehenden Listener (in meinem Fall: WLAN und Mobile Network Ortungsdienste) und arbeitet mit diesen weiter, egal was kommt.
    Es fragt nicht noch einmal nach, wenn die App aus dem Hintergrund in den Vordergrund kommt und es fragt auch nicht den allgemeinen Manager, der diese Änderung im System definitiv mitbekommen hat.


    Deine Testbeschreibung lässt darauf schließen, dass Du die App bereits mit höchster Genauigkeit startest, und das habe ich hier definitiv noch nicht ausprobiert. Eventuell befindest Du Dich auch nicht in der 'Wildnis', in der im Umkreis von mehreren Hundert Metern keine Wifi-Installationen zu finden sind.
    Mag in der Innenstadt klappen, ist fürs Festival aber eher suboptimal. ;)


    Ach ja, Apple Maps meint natürlich Google Maps.

    Wie geschrieben: Gerät Genauigkeit 'Stromsparen', also nur Wifi. App gestartet. Gerät Genauigkeit 'Höchste Genauigkeit' eingestellt. Zurück zur App. Keine Änderung.


    Sony Experia Z1, 4.4.2, Apple Maps hat eine vernünftige Genauigkeit.

    So, vielen Dank für Deine Antworten. :)


    Wenn Corona Dir die Arbeit abnimmt, dann brauche ich Dich ja gar nicht zu fragen, wie genau Du das implementiert hast.
    Also ob das View direkt über die GPS Daten angehängt wurde oder ein zwischengeschalteter Controller ihn mit aufbereiteten Daten versorgt.


    Wenn ich das mal überschlage bedeutet 5 Monate ungefähr 100 Werktage und ca. 50 Stunden bei zwei Stunden pro Abend.
    Das ist eine durchaus realistische Zeiteinschätzung, ich hätte so auf ca. 40h geschätzt. (Also eine Arbeitswoche)
    Gut, das beruhigt. :)


    Es mag sein, dass die Geschmäcker verschieden sind. Die Erfahrung (sowohl persönlich als auch aus diversen Vorträgen sowohl von Google als auch von Apple) hat gezeigt: der User möchte nach Möglichkeit, dass die App funktioniert wie das Gerät.
    Wer einen eigenen Geschmack bezüglich der Sprache seines Mobilgerätes hat, der stellt das Mobilgerät so ein. Natürlich tippt der deutschsprachige User auf Facebook und Google+ auf Deutsch, obwohl er sein Gerät auf Hebräisch Rückwärts eingestellt hat.
    Doch wenn er sein Gerät auf Hebräisch Rückwärts eingestellt hat, möchte er, dass seine Apps (sofern unterstützt, nicht jeder spricht Hebräisch Rückwärts) ebenfalls auf Hebräisch Rückwärts eingestellt sind. Sind sie es nicht, dann geht er davon aus, dass Hebräisch Rückwärts nicht unterstützt wird.
    Dass er in die Settings schaut ob es eine Lokalisierung gibt ist eher unwahrscheinlich.


    Und schon hagelt es 1-Stern-Bewertungen, weil die App auf Englisch ist und nicht auf Deutsch, obwohl der Entwickler offensichtlich deutschsprachig ist.
    Eben weil niemand in die Settings schaut. Egal ob das lang und ausführlich in der Beschreibung, den Screenshots und den Videotutorials erklärt wurde.


    Gut, eine derart geringe Datenmenge lässt sich ziemlich leicht in eine Textdatei abbilden.
    Bei größeren Datenmengen (also mehrere Fahrzeuge, reicht ja schon Auto, Motorrad und Fahrrad…) könnte sich eine kleine Datenbank von der Performance her schon lohnen.
    Du fragst nämlich immer nur einen Datensatz ab und veränderst nur einen Datensatz, anstatt das komplette JSON/XML/Whatever zu parsen und nach Änderung komplett zurückzusichern.


    Danke für die Erfolgswünsche. :)
    Aktuell ist der Projektberg allerdings noch so groß und die Prioritäten so ungünstig, dass ich da vermutlich frühestens Freitag mit beginnen kann.
    Wenn der Wunsch und das Interesse besteht kann ich die Sourcen (es wird nativ werden) gern öffentlich auf BitBucket teilen. :)


    Gruß Marco

    Hallo Jens,

    Ich entwickle allerdings nicht in nativer Android-Sprache, sondern mit dem Corona SDK , da ich parallel auch für iOS veröffentliche und sich dies mit Corona sehr einfach realisieren lässt.


    Ich weiß nicht, ob das eine gute Idee ist.
    Hier im Büro hatte ich eine 'Ortungsgenauigkeit' bei Standortbestimmung im Stromsparmodus (also Wifi + Mobile) von ca. 30m.
    Im Park hingegen war es eine Genauigkeit von ungefähr 798m, was für eine Strecke von ungefähr 600 Metern zum 'Auto' ausgesprochen unsinnig ist.
    Also habe ich die Standortbestimmungen auf 'Höchste Genauigkeit' gestellt, also Wifi, Mobiles Netz und GPS.


    Während die Google Maps App der Meinung war, die Genauigkeit läge bei ungefähr 8 Metern war picoPark davon überzeugt, es seien noch immer 798m.
    Allerdings habe ich die App nicht komplett neu gestartet, nachdem ich die Genauigkeit der Standordbestimmungen geändert hatte.


    Das versuche ich nachher noch mal, wenn ich mein 'Auto' vor der Postbank mitten in der Fußgängerzone 'parke'. :)

    Also im Großen und Ganzen gefällt mir die App schon recht gut.


    Unglücklicherweise könnte das Ganze hier als reiner Werbethread angesehen werden, also stell ich mal ein paar Fragen zur Umsetzung und hoffe, dass das Thema entsprechend bestehen bleibt. ;)


    • Die Kompassnadel gefällt mir außerordentlich, hast Du die mit Grafiken realisiert oder ist das eine eigene View?


    • Wieso lässt Du die Sprach- und Metrikeinstellung vom Nutzer vornehmen? Android hat ganz ausgezeichnete Lokalisationsmöglichkeiten, die das alles automatisch für Dich machen. Und Du kannst eigentlich davon ausgehen, dass jemand, der sein Gerät auf 'Deutsch' eingestellt hat, nicht unbedingt die englische Sprache in der App haben möchte. :P


    • Speicherst Du die Daten in einer SQLite Datenbank, oder hast Du Dir ein anderes Konzept ausgedacht?


    • Speicherst Du nur die aktuelle/letzte Position, oder kann man mehrere Positionen ablegen/eine Historie pflegen?
      (Hintergrund: wir haben zwei Autos und nutzen ab und an noch Car2Go und DriveNow. Da ist es schwierig zu wissen, welcher Punkt jetzt welches Fahrzeug ist.)


    • Ich plane eine im Prinzip ähnliche App, die ein paar interessante Punkte speichern soll und einem dann dort hin navigieren kann. Insofern die für mich wirklich wichtige Frage: wie lange hast Du für die Umsetzung so gebraucht?


    Joah, des war's erst ma. :)

    Nein.


    Wenn Dein String Array in einer .xml Datei abgelegt ist, arbeitest Du mit R.string.IMAGES weiter.
    Wenn Dein String Array im Code erzeugt wird, dann musst Du zusehen, wie Du das hinbekommst.


    Tutorials geben Dir niemals eine Anleitung dafür, wie Du genau Deine Wunschapp bauen kannst.
    Du musst also schon selbst Hirnschmalz investieren.

    Dumm ist die Frage nicht. ;)


    Die R.java beinhaltet halt ganz viele Konstanten. An Hand dieser Konstanten wird eine Ressource (String, Bild, Layout, Id…) eindeutig identifiziert.
    Man könnte das Ganze als eine Art Ressourcen ID ansehen. Wird auch in der Lagerhaltung im Supermarkt an der Ecke gemacht. Statt 'Joghurt, Kirsch, 3.8% Fett" hinterlegen sie lieber die ID 23641990 (EAN = European Article Number, interne Artikelnummerierung, in diesem Fall von Penny).
    Genauso können und wollen sich Bibliotheken und Buchhandlungen nicht auf 'Clean Code – Refactoring, Pattern, Testen und Techniken für sauberen Code; Robert C. Martin' verlassen. Sie schwören eher auf 978-3-8266-5548-7 (ISBN - International Standard Book Number)


    Du reichst also nur eine Konstante aus der R.java weiter.
    Im späteren Verlauf wird aus dieser ID dann beispielsweise über getRessources() die tatsächliche Ressource geladen.

    Ja, das ist soweit noch richtig.


    Es ist auch sinnvoll, Daten lokal in einer SQLite Tabelle abzulegen.


    Sämtliche Änderungen an Deiner ListView werden über den Adapter gemacht.
    Statt des normalen Cursor Adapter solltest Du Dir also eine Subklasse erstellen.
    Diese informierst Du jedes mal, wenn Du eine neue Mitteilung in die Datenbank geschrieben hast.
    Daraufhin informiert die Subklasse Deines Adapters dann Dein ListView, dass sich die Daten geändert haben.
    Dein ListView geht dann den üblichen Weg, um den Adapter nach den Daten zu fragen.

    Wie der Name schon erahnen lässt, fügst Du damit ein Extra in ein Intent ein.


    Hier wird es vermutlich gemacht, damit man in der startenden Activity auch das eben gewählte Bild angezeigt bekommt.
    Ob Du diese Funktionalität später brauchst kannst nur Du wissen. :)

    Es ist immer wieder schön zu sehen, wie man mit irgendwelchen Tutorials allein gelassen wird. ;)


    Java
    Intent intent = new Intent(this, ImageGridActivity.class);
    intent.putExtra(Extra.IMAGES, IMAGES2);
    startActivity(intent);


    Damit wird dem Intent, welches irgendwann die ImageGridActivity starten soll, ein Extra mitgegeben.
    So ein Extra wird an Hand eines Keys identifiziert. Und weil der gute Mann sich die Tipperei sparen wollte, hat er das in einen statischen konstanten String in Extras ausgelagert.


    Was genau da gesetzt wird kann Dir nur der Code verraten. Ich weiß nicht, was IMAGES2 beinhaltet.


    Naja, und wenn Du den String umänderst in "Heinz", "GehtDichNixAn", "Hier gibt es überhaupt gar keinen Key!!!" oder eben "", dann greift die Abfrage trotzdem.
    Im Kreationsprozess der ImageGridActivity wird er sich das Extra nämlich auch an Hand dieses statischen konstanten Strings holen und damit ist er dann auf demselben Stand wie Du, bekommt also alle Änderungen mit, die Du da einträgst.

    Das würde ich in Deinem Fall probieren.


    Ich persönlich mache das zwar nicht, allerdings sind bei mir die Timer auch nicht so zeitkritisch, dass ich ihren genauen Wert irgendwo darstellen müsste.

    Führst Du den Timer eventuell auf dem Mainthread aus?
    Falls ja könnte da das Problem liegen.


    Aktuell ist dann der Ablauf auf dem Maintrhead ungefähr so:
    Tick, Anzeige neu zeichnen, Tick, Anzeige neu zeichnen, Tick, Anzeige neu zeichnen…
    Wenn jetzt gerade ein neuer Tick reinkommt, während die Anzeige neu gezeichnet wird, wird halt stumpf noch einmal gezeichnet. Und dann sieht es so aus, als würde da eine Sekunde übersprungen.