Beiträge von Temar


    Denke ich an Entwicklung denke ich immer auch daran, dass es unter OS xyz mit der entsprechenden Runtime dort auch funktionieren sollte.


    Auf der JAVA FX Seite lese ich etwas von JAVA FX für Windows Mobile. Aber das es an sich für jedes Mobile OS gehen soll - auch für Android. Frage, hat das schon jemand seinem Android Mobile probiert? Welche Erfahrungen könnt Ihr berichten?


    Java FX ist auf Android nicht verfügbar. Java FX ist auch irgendwie das falsche Werkzeug, da sich Java FX eher gegen Flash und Silverlight positioniert. Du musst also für die Android-Entwicklung auf normales Java zurückgreifen. Mit entsprechendem Design sollte es aber möglich sein den größten Teil deiner Anwendung auch auf anderen Plattformen verwenden zu können.

    Auch sehr empfehlenswert:


    http://commonsware.com/


    Für 40$ kann man sich 1 Jahr lang immer die neueste Version der Bücher...

    • The Busy Coders Guide to Android Development
    • The Busy Coders Guide to Advanced Android Development
    • Android Programming Tutorials


    ...herunterladen. Die Bücher werden ständig aktualisiert und der Autor weiss auch wovon er spricht. Wer sich von seiner Kompetenz überzeugen möchte kann dies auf der offiziellen Android-Developers Mailing Liste machen. Dort ist Mark regelmäßiger Poster und gibt bei Fragen viele Hilfestellungen.


    Wer's lieber offline mag, kann die Bücher auch über Amazon bestellen.

    Zitat von Nebo85


    $su
    #id
    uid=10012(app_12) gid=10012(app_12)


    Irgendwas stimmt mit deinem "su" nicht. Du bekommst aus irgendeinem Grund keine Root-Rechte.


    Zitat


    Es ließe sich in der config.ini mit dem Eintrag ding=0 wegmachen, aber sobald ich was in dieser apk-Datei ändere, funktioniert sie nicht mehr.
    Hast du vielleicht einen Link von diesem Java Archivierer? Ich hab leider nichts gefunden?


    "jar" ist Bestandteil des Java SDK. Du kannst es entweder für Windows unter http://java.sun.com/javase/downloads/index.jsp herunterladen oder aber in deiner OpenSUSE Installation einfach über den Paketmanager installieren. Du musst darauf achten, das du das JDK und nicht das JRE herunterlädst. JRE ist die Java Runtime Environment für Java-Benutzer. Das JDK ist das Java Developer Kit - nur dieses enthält auch das jar Tool.

    Zitat von Nebo85


    folgendes gibt er mir dabei aus:
    uid=10012(app_12) gid=10012(app_12)


    Hast du vorher "su" eingegeben? Laut "id" bist du nämlich nicht root, sonst würde da "uid=0" stehen. Daher hast du auch keinen Zugriff auf die Ordner.


    Zitat


    Ich hatte die apk Datei zuerst schon mit Winzip offen, jedoch scheint hier Windows irgendwo ein Eintrag zu machen sobald ich etwas im Archiv ändere, sodass die apk Datei nicht mehr funktioniert wenn ich sie wieder zurückspiele.


    Ja, weil das keine normalen ZIP Dateien sind, sondern JAR Dateien - d.h. eine Zip Datei mit einem Manifest. In dem Manifest stehen die Checksummen der Dateien und eine eventuelle Signatur des Herstellers drin. Daher kannst du die Dateien zwar mit Winzip entpacken, solltest sie aber mit dem Java-Tool JAR packen.


    Zitat


    Jedoch lag die Lösung für meine Bedürfnisse leider nicht in der Textdatei sondern warscheinlich in einer ini-Datei.


    Der Inhalt der APK Dateien ist von App zu App unterschiedlich. Sounds und Bilder liegen aber meist unter "res/".


    Zitat


    Naja, soll es so sein, ich habe es mittlerweile aufgegeben, dann höre ich halt beim Navigieren mit der iGO-Software immer dieses lästige "DING" vor jeder Ansage.


    Ich weiss jetzt nicht was iGO ist, aber wenn das ne Navi-Software ist, dann liegen die Sounds meist auf deiner SD-Karte. Das macht es den Entwicklern einfacher neue Sprachen zu unterstützen. Ansonsten müsste man ja für jede Sprache eine eigene APK anbieten.


    Zitat


    Ich danke nochmals recht herzlich für die tatkräftige Unterstützung, und verbleibe mit freundlichen Grüßen


    Kein Problem :) Viel Spass noch mit deinem Handy.

    Zitat von Nebo85


    Habe soeben das Terminal am Handy aufgemacht und folgendes eingegeben:
    su


    Jetzt solltest du root sein. Du kannst das mit "id" prüfen.



    Als UNIX root hast du immer alle Rechte. Da ist irgendwas anderes faul. Wäre mal interessant, was die Befehle...

    Code
    ls -ld /system
    ls -ld /system/sd


    ... zurückgeben.




    Hehe, immer diese Windows User :) Eine APK Datei ist doch viel besser als ein Ordner voller Mist. Willst du die Applikation sichern oder auf einem anderen Handy installieren, dann musst du nur diese eine Datei kopieren. Keine Registry-Geschichten, keine nervigen Installer mit langsamen Ladebalken und kein Auswählen von irgendwelchen kryptischen Einstellungemöglichkeiten.


    Um das ganze noch einfacher zu machen, ist diese APK Datei einfach nur ein ZIP file. Du kannst sie also in ".zip" umbennenen und dann mit einem Packer deiner Wahl entpacken. Dann hast du auch wieder den Ordner mit den Dateien.

    Zitat von Nebo85


    Also konkret möchte ich eine bestimmte datei von einem installierten programm ändern.


    Das geht mit adb vom PC aus am besten:



    Zitat


    Dannach habe ich meine open suse kde live cd am pc gestartet, handy angeschlossen, beide partitionen der sd karte wurden erkannt, jedoch hatte ich zugriff nur auf die fat32 partition.


    Du hast nur Zugriff auf die FAT32 Partition, weil FAT32 keine Rechte kennt - d.h. bei FAT32 darf jeder alles. EXT4 hingegen kennt Rechte und die Dateien, die auf der EXT4 Partition liegen gehören garantiert nicht deinem Benutzeraccount. Daher darfst du sie auch nicht anfassen. Wenn du vollen Zugriff auf alle Dateien der EXT4 Partition haben willst, dann musst du root auf deinem OPENSUSE Rechner sein.


    Zitat


    Und wenn ich denn root rechte habe dann müsste ich doch am gerät den ordner "root" oder "sbin" öffnen können oder?


    Also die Ordner "/" und "/sbin" (den Ordner "root" gibt's nicht) liegen schonmal nicht auf deiner SD-Karte, sondern im internen Speicher. Deine zwei SD-Karten-Ordner sind "/sdcard" und "/system/sd/". Der zweite Ordner wird auch nochmal mehrfach nach "/system/data/..." verlinkt. Wenn deine gesuchte Datei also nicht unterhalb dieser Ordner ist, dann kannst du NUR mit "adb" oder aber einem Terminal direkt auf dem Handy zugreifen.

    Zitat von Nebo85


    Erstmal danke für diese tolle Anleitung! Ich habe sie Schritt für Schritt befolgt, und habe nun ein Cyanogen auf meinem G1 laufen!
    ....
    Ich komme einfach nicht in das Root-Verzeichnis!


    Sorry, aber was du schreibst macht irgendwie keinen Sinn. Wenn du Cyanogen drauf hast, dann hast du dein Handy erfolgreich gerootet.


    Das mit dem Root-Verzeichnis verstehe ich auch nicht. Das Root-Verzeichnis ist unter UNIX das Wurzelverzeichnis, also '/'. Auf das hast du immer (Lese-)Zugriff, weil du sonst ja keine einzige Datei im System erreichen könntest.


    Wenn du Dateien schreiben möchtest, dann musst do erstmal die /system Partition mit Schreibrechten einbinden. Das geht am einfachsten mit adb...


    Code
    adb remount


    ... vom PC aus.


    Danach kannst du entweder mit...


    Code
    adb shell


    ...vom PC aus auf das System zugreifen, oder aber vom Handy aus mit der Terminal-Applikation. Wenn du's vom Terminal aus machst, dann musst du erst noch "su" eingeben, um Root-Rechte zu bekommen.

    Zitat von Rapax


    Nun frag' ich mich ob's nicht möglich wäre, eine app zu schreiben, welches den filenamen des lokalen html files nimmt, diesen in die 'content:// formulierung' verpackt, dann den Browser mit dieser Adresse startet.


    Wieso willst du denn dafür eine App schreiben? Das kannst du doch in einer simplen Klasse realisieren.


    Das könnte so aussehen:



    Dann rufst du den Browser einfach so auf:


    Code
    WebBrowser.display("/sdcard/datei.html");


    Ich habe noch nie den Browser aufgerufen und den content:// Trick kannte ich auch noch nicht. So oder so ähnlich solltest du aber eine lokale Datei mit dem Browser anzeigen können.

    Zitat von vermeer


    Bin auch etwas weiter: Ich glaube in der manifest-datei hat noch <uses-permission android:name="android.permission.INTERNET" /> gefehlt:


    yep, sonst darf deine App kein Internet nutzen


    Zitat


    Die App zeigt mir zwar absolut nichts an, aber in der catlog werden die ganzen kitewiesen aufgelistet (allerdings mit Umlautfehler, kann man da noch irgendwo das charset angeben?)...


    Wenn nichts angezeigt wird, dann stimmt wohl noch was mit der ListView oder dem ListAdapter nicht.


    Charset einstellen kann man machen, nur solltest du das besser auf deinem Server machen. Java arbeitet standardmässig mit UTF-8 und das sollte auch dein serverseitiges Skript verwenden.

    Zitat von vermeer


    Hi Thema,
    Eclipse meckert in der Klasse: KiteweisenListActivity.Java:
    The method query(float, float) in the type KitewiesenLocationQuery is not applicable for the arguments (double, double)


    Ist in zeile 26: KitewiesenLocation[] locations = KitewiesenLocationQuery.query(49.540005, 11.026396);


    Die Werte scheinen wohl zu groß für den Datentyp float zu sein, daher nimmt Java den nächst größeren Datentyp, nämlich double. Ist wohl besser, wenn du alle Geokoordinaten von float auf double änderst. Also nicht nur in KiteLocationQuery, sondern auch KiteLocation - eben alles was mit Geokoordinaten arbeitet.


    Aus ...

    Code
    public static KiteLocation[] query (float latitude, float longitude)
    ...
                        location.setLatitude(Integer.valueOf(line_parts[2]).floatValue());
                        location.setLongitude(Integer.valueOf(line_parts[3]).floatValue());


    ...wird dann z.B.:

    Code
    public static KiteLocation[] query (double latitude, double longitude)
    ...
                        location.setLatitude(Integer.valueOf(line_parts[2]).doubleValue());
                        location.setLongitude(Integer.valueOf(line_parts[3]).doubleValue());


    Und wie gesagt, die KiteLocation Klasse ebenfalls anpassen, so dass statt Float-Werte eben Double-Werte gespeichert werden.

    Zitat von gummibaer


    Es ist etwas kompliziert zu beschreiben. Mit Drücken der Anrufannahme soll nicht der Anruf angenommen werden, sondern abgewiesen und ein Rückruf automatisch generiert werden, wenn die Anrufernummer aus einer zuvor definierten Liste stammt.


    Ich bin jetzt nicht auf dem allerneuesten Stand was Call-Interception angeht, bisher war sowas allerdings nicht möglich. Ich denke auch nicht, dass es mittlerweile eingebaut wurde, da das einige Sicherheitsprobleme aufwerfen würde.


    Auch das Abfangen der Hardwarebuttons ist mit den Standard SDK Mitteln nicht möglich. Zum einen aus Sicherheitsgründen (Abfangen von Passwörtern bei Hardwaretastaturen), zum anderen möchte Google wohl immer einige Grundfunktionen des Telefons garantieren.


    Das einzige was du machen könntest ist eine automatisch Rückruffunktion anzubieten, wenn der User bestimmte Anrufe abweist.


    Was natürlich auch immer geht ist das Anpassen des Android-Betriebssystems an sich. Dann kannst du all die Dinge machen, die dir das Standard-SDK nicht erlaubt. Allerdings hast du dann keine einfache Applikation mehr, sondern eine Firmware die du auf jedes Handy flashen müsstest.

    Zitat von gummibaer


    Ich habe mir Gedanken gemacht über eine App, die ich programmieren (lassen) will. Dazu müste man aber u. a. die Annahme von Anrufen "umprogrammieren" - also z. B. die Anrufannahme mit der ansonsten grünen Taste mit einer anderen Funktion hinterlegen. Erlaubt Android so etwas?


    Soweit ich weiss kann man die Tasten nicht umbelegen. Allerdings ist deine Beschreibung etwas vage. Wenn du genau sagen würdest was du vorhast, dann gibt es vielleicht andere Wege dein Ziel zu erreichen.


    Zitat


    Was kann man umprogrammieren und was ist so im Kern des Betriebssystems, dass man nichts ändern kann?


    Die Frage ist zu allgemein um sie konkret beantworten zu können. Was die Hardware angeht (wie z.B. Buttons), kann man sehr wenig umprogrammieren. Softwaremässig geht nahezu alles, allerdings ebenfalls mit Einschränkungen (besonders im Bereich Telefonie). Wenn du irgendwelche "verrückten" Dinge mit eingehenden Anrufen vorhast, dann kommst du schnell ans Limit. Wie gesagt, deine Frage ist zu allgemein.


    Zitat


    Wie vie Erfahrungen haben Entwickler hier in Deutschland mit Android? Gibt es schon größere Projekte, die deutsche Entwickler gestemmt haben?


    Jeder gute Java-Entwickler sollte keinerlei Probleme haben für Android zu programmieren. Da gehört nicht viel "Spezialwissen" dazu. Der einzige Unterschied zwischen einer normalen Java-Anwendung und einer Android-Anwendung ist die GUI-Programmierung (also die Oberfläche) und die Laufzeitumgebung (Android Programme können jederzeit vom OS schlafen gelegt oder beendet werden).

    So, das wird jetzt etwas länger. Eine Warnung vorweg: Das ganze ist völlig ungetestet und wahrscheinlich kompiliert der Code nicht einmal. Ich habe das einfach in den Editor hier getippt. Sieh es als Übung an meinen Mist zu korrigieren :)


    Hier also die KiteLocation Klasse. Das ist einfach nur eine Java Bean, die die einen einzelnen Listeneintrag aufnehmen kann.


    KiteLocation.java



    Als nächstes die KiteLocationQuery Klasse. Diese holt eine Liste an Kite-Locations von deinem Webserver und gibt diese als KiteLocation-Array zurück.


    KiteLocationQuery.java



    Jetzt kommen wir zum Android Part. Wir brauchen zwei Layouts: Eins für die ListActivity und eins für jeden Eintrag in der Liste. Hier das für die ListActivity.


    res/layout/main.xml



    Jeder Eintrag unserer Liste besteht aus 2 Werten: Der Ort und die Distanz.


    res/layout/row.xml



    Und hier die eigentliche ListActivity. Diese hat als Unterklasse einen KiteLocationAdapter. Der KiteLocationAdapter mapt jeden Eintrag eines KiteLocation Arrays auf einen Listeneintrag. Der KiteLocationAdapter kann natürlich auch extern definiert werden (nicht als Unterklasse, sondern als eigenständige Klasse) - reine Faulheit meinerseits.


    KiteListActivity.java

    Zitat von vermeer


    Gut, nearest.cfm ist angepasst. (es gibt jetzt noch einen weiteren (optionalen) Parameter: unit=km)


    Sehr gut. Jetzt ist es ideal für automatisches Parsen.


    Zitat


    Aber wie gesagt: Dein Codebeispiel wird bei mir (wie weiter oben geschrieben) nicht angezeigt.


    Natürlich nicht, denn es ist nur ein Parser um die Ausgabe deines Servers zu verarbeiten.


    Zitat


    Ich vermute dass er die Sache auch ausführt, aber eben nicht anzeigt. Muss da an dem xml nochwas verändert werden?


    Nicht nur da - wir haben noch einen langen Weg vor uns. Was wir als nächstes machen:


    • Erstellen einer Klasse "KiteLocation", die die Daten des Webservers aufnimmt.
    • Erstellen einer Klasse "KiteLocationQuery", der man GeoKoordinaten übergibt und die einem ein Array aus KiteLocations zurückgibt.
    • Erstellen eines Android ListAdapters, der die Daten aus einer KiteLocation Klasse für ein Android ListView aufbereitet.
    • Erstellen des Android ListViews, welches die Daten anzeigt.


    Das sind im wesentlichen die nächsten Punkte. Du kannst dir ja schonmal Gedanken darüber machen. Bin im Moment noch auf der Arbeit, hab also nicht so viel Zeit. Ich schreibe heute Abend mal mehr dazu mit ein paar Beispielen, wie das Aussehen könnte.

    Zitat von vermeer


    Und wieder ein Stück weiter - wenn auch nur mit den "Randarbeiten":
    Meine Seite "http://www.kitewiese.de/_app_android/nearest,cfm?Lat=<latitude>&Lng=<longitude>" ist fertig,


    Klappt ja sehr gut. Hab's gerade mal getestet. Ganz fertig bist du allerdings nocht nicht mit dem Skript.


    Das Problem ist, dass du unbedingt ein Trennzeichen zwischen der Beschreibung und dem Abstand benötigst, da du ansonsten Probleme beim Parsen der Antwort bekommen kannst. Die Antwort des Servers sollte also eher so aussehen:


    Code
    Stadt<Trennzeichen>Abstand
    Meine Stadt|7
    Andere Stadt|12


    Wie du an meinem Beispiel oben sehen kannst, habe ich auch gleich das "km" weggelassen. Das stört nämlich nur beim Verarbeiten der Daten und macht auch nur Sinn, wenn du in manchen Fällen auch mal Meilen zurück gibst. Falls das der Fall ist, dann sollte die Antwort aber eher so aussehen:


    Code
    Meine Stadt|7|km


    Was du auch noch bedenken musst ist, dass du dein Trennzeichen in allen Strings ersetzt. Es könnte nämlich passieren, dass jemand als Stadtname sowas eingibt: "Meine Stadt | Auf dem großen Hügel"


    Das Ergebnis wäre dann:


    Code
    Meine Stadt | Auf dem großen Hügel|7|km


    Sowas wird vom Parser natürlich falsch interpretiert. Du musst also in jedem String eventuelle Vorkommen deines Trennzeichens entweder kodieren oder aber einfach durch ein anderes Zeichen ersetzen.


    An deiner Stelle würde ich auch noch gleich die Geo-Koordinaten pro Treffer mitübermitteln, da du dann auf dem Android Handy sehr einfach Google-Maps anwerfen kannst und der Benutzer kann sich zum Standort hinnavigieren lassen.


    Zitat


    die Frage ist jetzt eben "nur": Wie bekomme ich die jetzt auf dem Android angezeigt bzw. wie übermitlle ich den aktuellen Standort.
    Wäre schän, wenn mir jemand helfen könnte/würde.


    Das mit dem Standort würde ich als letztes machen. Das ist das kleinste Problem, denn den kann man sich einfach vom Telefon zurückgeben lassen.


    Sobald du dich für ein Trennzeichen entschieden hast, können wir den Parser bauen. das geht dann ungefähr so:


    Zitat von Rapax


    Irgendwie muss man doch die String Array in das ListView hineinkriegen, oder?

    Java
    tl_out = (ListView) findViewById(R.id.lv);
    lv.setText(list);


    Hast du's mal mit:


    Code
    tl_out = (ListView)findViewById(R.id.lv);
    tl_out.setAdapter(new ArrayAdapter<String>(this, R.id.lv, list));


    probiert? So oder so ähnlich sollte das gehen. Hab schon ewig nichts mehr mit ListViews gemacht. Wenn's nicht klappt, dann meld dich nochmal. Dann les ich mal in der Api-Doku nach.


    Ja, sie werden in der Reihenfolge angezeigt, in der sie im Dateisystem angelegt wurden.


    Weiterhin viel Erfolg.

    Zitat von Rapax


    Eigentlich müsstest du eine NullPointerException bekommen, da du tv_out nicht initialisiert hast. In deinem layout xml file hast du eine ID für das TextView vergeben. Mit dieser ID kannst du an eine Instanz kommen: