Posts by schymura

    Hallo Marco Feltmann,
    danke für die Antwort.

    Quote

    Nehmen wir die Namenskonventionen, dann überschreibt 'setX()' den Wert X.
    Würde er ihn hinzufügen, hieße er 'addX()'.

    Deine Erklärung für die Kriterien ist sehr einleuchtend.

    Quote

    Auch ist es möglich, dass die LocationUpdates triangulieren und nicht nur den einen nächsten Sendemasten ausgeben, sondern alle in Reichweite befindlichen Sendemasten.

    Dies scheint der Fall zu sein, zumindest bei locationManager.requestSingleUpdate() und wenn nur das Netzwerk genutzt wird.
    Es sind in der Queue keine weiteren alten Daten vorhanden, denn die könnte man ja über locationManager.getLastKnownLocation() weglesen....


    Meiner Feststellung nach ist es tatsächlich so, dass es auch bei 10 aufeinander folgenden requestSingleUpdate() Aufrufen immer noch nicht sicher ist, dass man über meine Array-Methode den richtigen Sendemast ganz sicher zu erkennen.
    Bei 50 requestSingleUpdate() Aufrufen dagegen gab es nie einen falschen Sendemast, wenn man die Position nutzt, die am häufigsten vorkommt.


    Schöne Grüße,
    schymura ^^

    Hallo,
    bin gerade dabei eine App zu schreiben, die Offline (Vektor) Karten anzeigt (mapsforge) und auf diesen bei Wunsch (GPX) Tracks als Overlay anzeigt, zum Orientieren bei Wanderungen etc.. Funktioniert auch alles soweit. Überraschungen sind für mich jedoch aufgetreten, wenn ich die Position über das Netzwerk (LocationManager.NETWORK_PROVIDER) feststellen und als Overlay einblenden möchte.
    Überraschung 1:

    Code
    Criteria kriterien=new Criteria();
    kriterien.setAccuracy(Criteria.ACCURACY_COARSE);
    kriterien.setPowerRequirement(Criteria.POWER_LOW);


    führt (meist) zum erwarteten Ergebnis.
    Aber auch

    Code
    Criteria kriterien=new Criteria();
    kriterien.setAccuracy(Criteria.ACCURACY_COARSE);
    kriterien.setAccuracy(Criteria.ACCURACY_MEDIUM);
    kriterien.setPowerRequirement(Criteria.POWER_LOW);


    gibt genau das gleiche Ergbenis. Setze ich statt Criteria.ACCURACY_MEDIUM dann Criteria.ACCURACY_LOW ist es auch das selbe.
    Wenn ich jedoch Criteria.ACCURACY_HIGH statt Criteria.ACCURACY_MEDIUM setze geht die App ins Nirvana.
    Überschreibt ein neuer Aufruf von setAccuracy() die vorher gesetzen Kriterien (ACCURACY_COARSE)?? Wer kann dazu genaueres sagen?


    Überraschung 2:
    Egal ob ich die Position dann mit

    Code
    locationManager.requestSingleUpdate(kriterien, singlelocationListener, null);


    oder

    Code
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,pos_zeit_interval*1000, pos_min_distanz,locationListener);


    aufrufe, wobei ich requestSingleUpdate vorziehe, erreiche ich nicht immer den nächstliegenden Sendemast, sondern auch des öfteren andere Netzwerkzellen, bis zu 20 km entfernt.
    Warum geschieht dies und wie kann man (ich) darauf vernüftig reagieren.
    Übrigens habe ich ein ähnliches Verhalten auch bei OSMAND festgestellt.
    Bisher fällt mir nur ein die Daten von 10 ooder 50 oder 100 requestSingleUpdate Aufrufen in einem Array zu speichern und dann die am häufigsten vorkommende Position als die "richtige" zu nutzen.......


    Hat von Euch jemand eine Idee??
    Mit fragenden Silvestergrüßen,
    schymura :sleeping:

    Hallo Katsche,
    das Widerverwenden des gleichen Layouts ist nicht schädlich, wenn man sich dadruch nicht durcheinander bringen lässt.


    Was ich bei deiner Konstruktion nicht verstanden habe ist
    1: Beim Start der App wird MainActivity gestartet. Der Schalter savebutton funktioniert jedoch nicht, denn würde er es tun, würde die App beendet werden.
    2: In der nicht gestarteten Activity Contatc schreibst du zwar die Daten aus, hast hier auch einige setOnClickListener(new OnClickListener() eingebaut und , aber was das so alles soll kann ich nicht verstehen.


    Schau dir bitte an, was du in der AndroidManifest.xml genau startet.


    Schöne Grüße,
    schymura ^^

    Hallo Katsche,

    Quote

    Ich würde mich freuen, wenn Ihr Euch das mal anschauen könnt und mir evtl. sagt wo der Fehler liegt oder Tipps gibt!

    ehe ich es mit einem Tipp versuchen kann, möchte ich dir sagen, dass ich zuerst ziemlich deshalb durcheinander kam, weil du in MainActivity und in Contact die gleiche Layaoutdatei (main.xml) verwendest.


    Was ich dann auch nicht ganz verstanden habe ist, dass in der AndroidManifest.xml


    Code
    <intent-filter>
       <action android:name="android.intent.action.MAIN" />
       <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>


    steht, also die MainActivity aufgerufen wird, du jedoch nur in Contact.java

    Code
    startActivityForResult(intent, PICK_CONTACT);	
    onActivityResult


    vorhanden sind.


    Ich hatte bisher immer gedacht, dass die zuvor genannten in der aufrufenden Activity (MainActivity) stehen sollten.
    Der Save.Button ist nur in MainActivity bearbeitet, aber was soll er speichern???


    Kannst du mir sagen, warum die in Contact.java stehnen?
    Was habe ich bislang nicht verstanden bei deiner Konstruktion?


    Fragende Grüße,
    schymura :-X

    Hallo Marco Feltmann,

    Quote

    den Default Handler ausprobiert?

    die Frage war wirklich gut!
    Denn dadurch habe ich DefaultParser nun getestet und habe (für mich überraschend) festgestellt, dass er wirklich schnell arbeitet.


    Danke! Werde dann also nicht mehr durch die Gegend hoppeln, sondern mir schön rund mit dem DefaultParser die Gegend anschauen.....


    Schöne, dankbare Grüße,
    schymura

    Hallo Marco Feltmann,
    danke für die Antwort.
    Ist es also anscheinend doch so langsam....

    Quote

    Dein achteckiges Rad kann sich aber bei rtept und wpt verschlucken

    Nee, das tut es nicht, denn Waypoints etc. werden überhaupt nicht beachtet....
    Außerdem muss ich nicht voraussetzen, dass im Trackpoint Latitude und Longitude in "richtiger" Reihenfolge stehen. Höhe , Zeit etc, brauche ich aus dem Trackpoint auch nicht, denn ich wil den eingelesenen Track nur als Overlay einblenden.


    Schöne, dankbare Grüße,
    schymura ^^

    Hallo Marco Feltmann,
    nochmal danke, denn so habe ich mich nun mal mit dem XmlPullParser auseinandergesetzt.
    Zumindest glaube ich, dass ich die Klasse so in etwa verstanden habe.
    Leider aber kann ich sagen, dass selbst eine primitive Implementation, auch wenn sie nichts weiter macht, als den ganzen Text nach den TAGS duchzuscannen nicht schneller (sogar langsamer) arbeite, als mein "achteckiges Rad".
    Hier also die einfache Implementation.


    Du sieht, hier wird nur gescannt, nichts bearbeitet, keine einzige Rekursion ausgelöst etc. noch nicht einmal etwas in das Log ausgegeben ausser bei Dokumentstart und beim Dokumentende. Die unterschiiedlichen zu suchenden Zeichenfolgen im Trackpunkt, in dem ja auch noch viele andere Informationen (TAGS) stehen (können) wurden dabei überhaupt nocht nicht mit einbezogen....


    Wenn ich nicht einen großen Denkfehler mache ist XmlPullParser zwar eine mächtige Klasse, aber nicht wirklich schnell.
    Für weitere Anregungen bin ich immer offen.
    Schöne Grüße,
    schymura ^^

    Hallo Marco Feltmann,

    Quote

    Ich fürchte, Dein Fehler liegt darin, dass Du das Rad neu erfindest – und zwar achteckig. ;)

    ja, da hast du wohl Recht! Diese Vermutung hatte ich ja auch schon, sonst hätte ich die Frage nicht gestellt.

    Quote

    So schnell wie OsmAnd wirst Du die Datei mit Bordmitteln vermutlich nicht parsen können

    Na, gut, ich möchte schon bei Android bleiben und nicht noch mit C++ arbeiten....

    Quote

    Eine GPX-Datei ist zwar eine Textdatei, aber sie ist gleichzeitig auch eine XML Datei.

    Der Link ist gut, werde ich mich wohl mal mit dem XmlPullParser beschäftigen, wenn GPX als XML betrachtet werden kann.


    Dankbare Grüße,
    schymura ^^

    Hallo,
    vermutlich ist die Frage, die ich habe ziemlich dumm, aber dennnoch stelle ich sie.
    Ich muss in größeren Textdateien (GPX-Datei, oft mehr als 100.000 Zeichen) die Werte der Longitude und der Latitude in jedem Trackpunkt ermitteln.
    Mein bisheriger Ansatz:
    Alles aus der Datei in einen String (zwischen) schaufeln, dabei die Zeilenden nicht mitnehmen.
    Dann alles über zwischen.indexOf(Zeichenfolge, Startwert) suchen.

    Code
    String TP_SEGSTART="<trkseg>",TP_PUNKTSTART="<trkpt",TP_PUNKTENDE="</trkpt>";
    String TP_LATSTART="lat=",TP_GAENSE=""",TP_LONGSTART="lon=";


    Erst nach TP_SEGSTART darf dann nach TP_PUNKTSTART gesucht werden.
    Erst hinter TP_PUNKTSTART dürfen dann die anderen Daten bis zum nächsten TP_PUNKTENDE genutzt werden.
    In diesem Bereich ist dann der Beginn von TP_LATSTART und TP_LONGSTART zu suchen, wobei die Reihenfolge nicht wirklich feststeht.
    Nach dem Startwert ist dann das betreffende Ende TP_GAENSE zu suchen und jeweils dann die Zahlenwerte dazwischen zu ermitteln.
    Dann den nächsten Trackpunktbeginn suchen über zwischen.indexOf(TP_PUNKTSTART, Startwert von gefundenem TP_PUNKTENDE +1) und dies dann bis zum Ende des ganzen Strings( > 100.000 Zeichen).


    Leider ist mit meinem Vorgehen die Zeitdauer bis zu 5 mal größer, als wenn ich die gleichen Daten auf dem gleichen Gerät mit einer anderen App (etwa OSMAnd) einlese.


    Wer kann mir helfen?
    Wo liegt mein Fehler?


    Fragenden Grüße,
    schymura :-/

    Hallo FebsDeluxe,
    wie es auch schon ChampS und Marco Feltmann aufgefallen ist setzt du ein Menü als ContentView, das geht nicht gut, wie du ja bemerkt hast.
    Wenn du alerdings kein PopUp_menü brauchst, wie Kogoro-Christopher es annimmt, sondern das nomale Mneu (R.menu.main) jeweils nur angepasst anzeigen möchtest,
    oder es dann wenn du möchtest etwa über einen Button anzeigen möchtest könnte ich dir ev. hellfen
    Ich selbst nutze in solchen Fällen ein Menü, das ich netsprechend anpassen kann:
    Dazu setzte ich eine globale Variable

    Code
    static Menu mymenu=null;


    und setzte schreibe dann das Menü in etwa so

    Code
    @Override
    public boolean onCreateOptionsMenu(Menu menu) 
    {	// Inflate the menu; this adds items to the action bar if it is present.
    	mymenu=menu;
    	schaltmenue();
    	return true;
    }


    Die Funtktion schaltmenue() könnte dann in etwa so aussehen


    Und diese Funktion kann ich dann überall und immer aufrufen.....
    Schöne Grüße,
    schymura :sleeping:

    Hallo killphil75,
    danke, ja, das war es natürlich.
    Hatte ich nicht dran gedacht, weil ja die anderen Funtionen und Methoden sauber laufenm so lange sie keine Ausgabe auf dm Schirm machen wollen......
    Falls es dich (oder jemand anders) interesssiert hier dann der Quellcode, der sauber läuft, auch ohne AsyncTask:



    Dankbare Grüße,
    schymura ^^

    Hallo,
    habe mich nun doch daran gemacht, eine App für die Anzeige von (Vektor)-Karten zu machen.
    Dazu nutze ich die die Libary mapsforge-map-0.3.0-jar-with-dependencies.jar von mapsforge (https://code.google.com/p/mapsforge/ ) Danke nochmal an CD-Wechsler für den Tipp vor 9 Monaten.....
    Funktioniert auch alles ganz gut!
    Wenn ich allerdings eine größere Track-Datei (GPX) einlade um die Daten als Spur in einem Overlay anzuzeigen dauert das halt lange....
    Deshalb habe ich dieses Einlesen in einen Extra Thread getan.


    Funktioniert alles soweit, aber wenn ich dafür sorge dass in test etwas steht stürzt die App ab (Tut uns leid..., Beenden).


    Wie kann ich den String test ausgeben, dennnwen da was drun steht, ist in der Trackdatei ein Fehler festgestellt worden beim Einlesen.
    Diesem möchte ich dem User nicht vorenthalten.


    Welchen Denkfehler mache ich?


    Mit fragenden Grüßen,
    schymura :P

    Hallo Christopher,
    danke für die Antwort.

    Quote

    Aber so kommt man wenigstens auf die Idee auch sowas abzufangen

    Vor dem remove(i) Anzahl merken und dann nach dem remove(i) so lange warten bis sich die Anzahl verringert hat ist dann für einen derartig seltenen Fall doch wohl zu viel des Guten....


    Übrigens ist die App bei der mir das passiert ist und deren Grundkonzept ich ja hier beschrieben hatte auf meine Webseite http://www.schymura.info zu finden. In (fast) jeder obersten Auswahlzeile unter im Seitenmenü unter Smartphone und dann WanderRecorder.


    Schöne Grüße,
    schymura :)

    Hallo,
    ich kann und muss Entwarnung geben.......


    Anscheinend hatte ich mit einer (leider) nicht mehr nachvollziehbare wilden Aktion auf dem Smartphone (beim Einfangen von Bildern für die Beschreibung der App) irgendeinen Speicherfehler oder Ähnliches erzeugt, der sich in der beschriebenen Aert auswirkte.


    Nachdem ich dann das Smartphone gaz abgeschaltet und später wieder angeschaltet hatte trat dieser Zeitfehler nicht mehr auf!
    Android scheint wohl doch nicht alle Activitys sauber in eigenen Speicherräumen zu verwalten.


    Schöne Grüße,
    schymura :)

    Hallo,
    beim Testen einer neuen App, Grundkonzept steht hier, ist mir aufgefallen, dass ich noch Einträge in einer Liste habe, nachdem ich den einzigen Eintrag darin über

    Code
    fieseListe.remove(i)

    entfernt hatte. Im Integer i steht auch wirklich die 0.
    Wenn ich dann gleich hinterher über

    Code
    fieseListe.isEmpty()

    oder

    Code
    fieseListe.size()

    abfrage ob die Liste leer ist, so erhalte ich als Ergebnis false oder 1.
    Wenn ich dann aber die Liste in eine Anzeigeliste übertrage, dann ist sie leer.........
    Wieviel Zeit muss also vergehen?
    Und hat schon mal jemand ein ähnliches Verhalten beobachtet?
    Ach ja, die List fieseListe ist als

    Code
    static List<String> fieseListe=new ArrayList<String>();

    golbal definiert.


    Und die beschriebenen Ergebnisse erhalte ich auf einem Smartphone, auf dem Android in der Version 2.3.6 läuft.


    Mit interessierten, fragenden Grüßen
    schymura :)

    Hallo Marco Feltmann,
    danke für die Antwort.

    Quote

    Du beschreibst jetzt weniger einen analogen Recorder als viel mehr ein VoiceMemo-Schnittsystem.

    Das mag sein, ich bezog mich nur auf dem alten, irrgendwann zu ersetzenden, Mini-Kasetten-Recorder.

    Quote

    Multiple Selektion: alle selektierten Files in der Reihenfolge der Liste abspielen

    Mehrfache Auswahl hatte ich doch tatsächlich (noch) nicht in meiner Überlegung drin, aber ich hatte schon daran gedacht ab dem ausgewählten Schnipsel alle folgenden abspielen.
    Dann muss ich allerdings auch noch pausieren können, damit ich mit dem Tippen nachkomme, wenn ich auch den Schnipseln (gefällt mir!) eine Tourenbeschreibung mache......


    Danke, war eine gute Anregung.
    Schöne Grüße,
    schymura :)

    Hallo,
    zuerst einmal Grüße an alle.
    Nachdem ich nun etwa ein halbes Jahr gewandert bin und oft auf Campingplätzen, oft ohne Netzzugang, übernachtet (gewohnt) habe bin ich nun wieder am heimischen Netzwerk und kann nun auch wieder mitmachen.


    Mit Wandern hat aber auch mein "neues" Projekt zu tun.
    Ich halte beim Wandern den genauen Wegeverlauf mit einem analogen Recorder (Mini-Kasette) fest für die spätere Beschreibung des Wegeverlaufs. So ein analoger Recorder hat den Vorteil, dass man zurückspulen kann, um einfach was Falsches wieder zu übersprechen.
    Besonders wenn man mal etwas falsch (nicht der richtigen Wegemarkierung gefolgt ist) gegangen ist.
    Leider gibt es immer weniger annaloge Recorder, deshalb möchte ich gern eine App schreiben, die auf dem Smartphone unter Android die Vorteile eines analogen und eines digitalen Recoders/Players verbindet.
    Meine bisheriges Konzept sieht so aus:
    Wie bei bei Android normal jede einzelne Aufnahme (ob länger oder kürzer) in einer eigenen Datei (Zeitstempel) im selben Verzeichnis speichern und in einer Anzeigeliste anhängen.
    Dadurch sind sie zwar nur zeitlich geordnet, aber wenn man (ich) möchte kann ich sie alle nacheinander abspielen lassen, oder auch nur einzeln.
    Zum Andern soll auch die Reihenfolge in der Anzeige zu ändern sein und außerdem sollen auch noch die Dateinamen der einzelnen Aufnahmen aus dieser Anzeige gelöscht werden können.
    Jedoch sollen dann die Dateinamen in eine Liste der "gelöschten" Aufnahmen übernommen werden und die Dateien nicht wirklich gelöscht werden.
    Dadurch könnte man sich immer noch behelfen, wenn man mal etwas zu voreilig eine Aufnahme entfernt hat.
    Im Gegensatz zu dem wirklich analogen Recorder, wo dann ja die neue Aufnahme alles überschreibt.


    Was meint ihr dazu? Habt ihr Anregungen, Erfahrungen, etc.??


    Mit erwartungsvollen Grüßen,
    schymura ^^

    Hallo Lucas de Vil,

    Quote

    An der Methode liegt es einfach nicht, es ist also nicht die fehlerhafte Methode.

    wenns denn so ist....
    Habe die Methode mal zusammengekürzt und erhalte dann auf meinem Smartphone mit android 2.36
    den gleichen Fehler, wie zu Anfang beschrieben.....


    Code
    private void ErmittelWerteUndSchreibeInEdits(double ueber,boolean istlat)
    {
    		String hilf=Location.convert(ueber, Location.FORMAT_SECONDS);
    		String halten=hilf;
    		double einser=Location.convert(halten);
    	hilf=Double.toString(einser);
    }


    Schöne Grüße, schymura ^^