Dies und Das seit 2001

Android vs. The Picture

Taking Photos Simply“ aus dem Android-Dev-Training ist scheinbar blanker Hohn.

Das ganze ist so simple, dass es mich mehrere Stunden, etliche Klicks durch allerlei Hilfen, Foren und Blogposts gekostet hat, bevor ich annähernd auf die Lösung des Problems gekommen bin.

Dabei war die Ausgangslage doch so einfach:

Zusätzlich zum Link auf den Shop, sollte der Benutzer auch noch ein Bild erstellen können, das mit dem Tweet, Facebook-Eintrag, whatever… hochgeladen wird.

Man ruft also die Kamera auf, macht das Bild, übergibt das als Intent an den Action_Send-Intent und fertig ist der automatische Post.

Falsch!

Fertig wäre der automatische Post aus Text und Bild, wenn es denn wirklich so einfach wäre. Ist es aber leider nicht.

Hindernis Nummer 1 ist schon mal die Wahl des ACTION_SEND. Denn neben dem gibt es auch noch ein ACTION_SEND_MULTIPLE für das Teilen mehrerer Bilder oder Texte. Also eigentlich das was ich haben wollte, aber dann doch nicht.

Das Problem liegt nämlich weniger am Inhalt, wie es mir scheint, als an der Deklaration des selbigen:

Zusätzlich zum Inhalt muss auch noch deklariert werden, was man denn da eigentlich übergibt damit das OS selber schon mal filtern kann, welche Apps für diese Art Inhalt denn eigentlich in Frage kommen. Das weiß man vorher nämlich nicht, denn, soweit ich das gesehen habe, gibt es da keine Chance an diese programmatische Information heranzukommen.

Da der Link ja „text“ ist, kommt dafür der Mime-Type „text/plain“ in Frage. Für’s Bild dann leider „image/jpeg“. Schnittmenge der beiden ist dann also „*/*“.  Was da im Hintergrund passiert, kann jeder mal ausprobieren, wenn er in den Supermarkt geht und folgendes sagt:

Entschuldigen Sie!

Ich hätte gern 2 und 1,5.

Kilo? Liter? Äpfel? Wiener? Waschmittel?

Nichts anderes passiert in Android. Die Zielanwendung läuft Amok!

  • Seesmic zum Beispiel ließ sich erst dazu überreden beides zu nehmen, als ich mich entschied „images/*“ zu nutzen. Also Bilder, egal welchen Typs. Ab da lief es.
  • Facebook verweigert bisher die Zusammenarbeit und öffnet den Bilder-Upload. Mit Bild, aber ohne Text. Oder eben umgekehrt. Oder nur mit einer Fehlermeldung. (Übrigens ein „Feature„)
  • WhatsApp habe ich mir gleich gespart, da weiß ich ja, dass es nur das eine oder das andere zur gleichen Zeit kann.
  • Google-Mail kann Text und Bild. Als Text und Attachment Bild.

Den Rest habe ich noch nicht getestet und werde wahrscheinlich davon auch wieder graue Haare bekommen.

Der zweite Punkt, der das Arbeiten mit Bildern unter Android anscheinend etwas sperrig und bockig macht, ist das beharren auf Files.

Ich mache ein Bild, dass es schon persistent im Speicher abgelegt wird, bekomme aber nicht den Link oder die URI zum Bild um damit weiter arbeiten zu können, sondern muss mir danach nochmal ein temporäres Bild erstellen, dass ich dann wiederum für den Share nutzen kann. Fragt nicht nach dem Sinn!

Aber nachdem TweetDeck, WhatsApp, Facebook und Instagram auch so viel Datenmüll und Redundanzen produzieren, scheint es wohl der einzige Weg zu sein.

Letztlich habe ich es jetzt doch irgendwie zum laufen gebracht. Aber ganz ehrlich: Hübsch, vor allem der Code, ist anders. Der Umweg über das Speichern und Arbeiten mit File-Objekten hat mich schon ziemlich Nerven gekostet.

Bleibt als Fazit wieder ein Punkt:

Ich weiß im Zweifelsfall nicht, ob es das Buch, dass ich ausgewählt habe, im Shop, den ich ausgewählt habe, auch wirklich gibt.

So geschehen mit einem Buch, das ich zum testen genommen habe und von dem es mittlerweile wieder eine neue Auflage unter neuer ISBN gibt.

Alles schön verlinkt und bebildert, am Ende kommt dann aber ein „Suche nicht erfolgreich“ wenn ich den gekürzten Link aufrufe.

Das wird aber dann hoffentlich das letzte Ärgernis sein. Zumindest vor dem Layout…

Weiter Beitrag

Zurück Beitrag

6 Kommentare

  1. der_vogel 22. Mai 2013

    Ich hab plötzlich überhaupt keine Lust mehr für Android zu entwickeln :D

    • hazamel 22. Mai 2013 — Autor der Seiten

      Vielleicht stell ich mich dabei auch nur ziemlich dämlich an ;)
      Die Intent-Geschichte ist gar nicht ma so kompliziert, die aufzurufende Anwendung ist aber leider immer so ein bisschen Blackbox, wenn man sie nicht gerade selber programmiert hat.
      An vielen Stellen läuft es auch ein bisschen dem zuwider, was ich die letzten Jahre als OOP gemacht habe. Liegt wahrscheinlich aber auch entweder an mir oder an der Tatsache, dass das zentrale Element immer die Activity ist und mein Code dementsprechend saumäißig aussieht.
      Ich werde da auf jeden Fall nochmal ein Refactoring machen müssen.

      • der_vogel 22. Mai 2013

        Aber das es da keine Standards gibt ist kacke. Ein Text und ein Bild an eine App zu übergeben ist jetzt nicht gerade so unfassbar exotisch.

      • hazamel 22. Mai 2013 — Autor der Seiten

        …dachte ich auch ;)
        Das Problem ist echt, dass du nicht dran kommst, was denn eine andere App eigentlich akzeptiert bzw. innerhalb der App dann nochmal programmatisch festgelegt werden kann, wie die App das akzeptiert (siehe Facebook: Nur Text ODER Bild, aber nicht beides)
        Keine Ahnung wie das bei iOS aussieht, aber das finde ich schon aus Entwicklersicht sehr anstrengend.
        Wäre aus meiner Sicht auch alles nur halb so wild, wenn es vernünftige Doku dazu gäbe. Die Beschreibung im Training ist ein Bruchteil dessen was im eigentlichen Beispiel steht und da ist dann nichts mehr erklärt. Man muss da schon leidensfähig sein

  2. der_vogel 22. Mai 2013

    Naja bei iOS musst du, soweit ich weiß, jeden Service einzeln in die App einbauen. Da gibt es gar keinen Standard.

    • hazamel 22. Mai 2013 — Autor der Seiten

      Also noch mehr bäh!
      Neueste Erkenntnis: Facebook-Messenger nimmt Text und Bild an, verschickt sie aber nicht. Doof das

© 2019 Hazamelistan

Thema von Anders Norén