Einführung
Willkommen bei Android App Entwicklung für Dummies.
Als Android 2005 von Google übernommen wurde (ja, Android war einmal ein junges, aufstrebendes Unternehmen), stieß das zunächst einmal auf kein verbreitetes Interesse, da Google im Mobilbereich noch gar nicht aktiv geworden war. Nur wenige Jahre später war es dann aber so weit, als Google mit dem G1 sein erstes Android-Smartphone vorstellte. Und es bedeutete den Startschuss einer wahrlich enormen Entwicklung.
Das G1 war das erste frei verfügbare Android-Gerät. Es konnte seinerzeit zwar nicht mit der großen Funktionsvielfalt des iPhones mithalten, die Plattform genoss aber Vertrauen. Und mit der Veröffentlichung von Donut (Android 1.6) wurde klar, dass Google erhebliche Anstrengungen in das Produkt investierte. Und tatsächlich erschien bereits direkt nach der Version 1.6 die Version 2.0 am Horizont.
Aktuell sind wir bei der Version 5.0 der Android-Plattform angekommen, und noch gibt es keine Anzeichen, dass sich das Entwicklungstempo verlangsamen würde. Zweifellos handelt es sich immer noch um aufregende Zeiten im Bereich der Android-Entwicklung.
Über dieses Buch
Android App Entwicklung für Dummies soll Sie beim Einstieg in die Entwicklung von Android-Anwendungen unterstützen. Sie benötigen dazu keine Vorkenntnisse in der Android-Anwendungsentwicklung.
Android ist eine geräteunabhängige Plattform. Sie können daher Anwendungen für unterschiedliche Geräte entwickeln. Dabei handelt es sich nicht nur um Telefone, Uhren, Tablets, Autos, E-Book-Reader, Netbooks, Fernseher und GPS-Geräte.
Wenn Sie wissen, wie Sie Anwendungen für die Android-Plattform entwickeln können, erschließen Sie sich damit eine Vielzahl von Optionen. In diesem Buch werden Hunderte, wenn nicht Tausende Seiten an Android-Dokumentation, Tipps, Tricks und Tutorials in einem kurzen, besser verdaulichen Format zusammengefasst, damit es Ihnen als Sprungbrett in eine Zukunft als Android-Entwickler dienen kann. In diesem Buch finden Sie keine fertigen Rezepte, es stattet Sie aber mit den grundlegenden Kenntnissen aus, die Sie benötigen, um mit den verschiedenen Android-Bausteinen interaktive und überzeugende Anwendungen erstellen zu können.
Wie Sie dieses Buch benutzen sollten
In diesem Buch nutzen Sie die Klassen des Android-Frameworks und werden Java-Klassen und XML-Dateien erstellen.
Quelltextbeispiele werden in diesem Buch in einer nichtproportionalen Schriftart dargestellt, damit sie sich vom übrigen Text abheben. Codebeispiele sehen daher so aus:
public class MainActivity
Java ist eine Hochsprache, die zwischen Groß- und Kleinschreibung unterscheidet. Daher müssen Sie den Text genau so in den Editor eingeben, wie er im Buch abgedruckt ist. Ich werde mich im Buch zudem an die üblichen Java-Konventionen halten. Das erleichtert die Austauschbarkeit zwischen meinen Beispielen und denen aus dem Android-SDK (Android Software Development Kit). Für Klassennamen wird zum Beispiel immer ein Format mit Binnenversalien (PascalCase) verwendet.
Auch alle im Buch angegebenen Internetadressen (URLs) werden in der für Quellcode verwendeten Schriftart dargestellt:
http://d.android.com
Törichte Annahmen über den Leser
Für den Einstieg in die Android-Programmierung benötigen Sie einen Computer, auf dem eines der folgenden Betriebssysteme läuft:
Windows 2003, Vista, 7 oder 8
Mac OS X 10.5.8 oder höher
Linux GNOME oder KDE
Sofern sich diese Programme nicht bereits auf Ihrem Rechner befinden, müssen Sie sich darüber hinaus Android Studio (kostenlos) und das Java Development Kit (das JDK ist ebenfalls kostenlos) herunterladen. In Kapitel 2 werde ich die Installation der Tools und Frameworks ausführlich darstellen.
Da Android-Apps in der Programmiersprache Java entwickelt werden, müssen Sie diese – wie bereits erwähnt – verstehen. Zudem macht Android bei der Definition verschiedener Ressourcen innerhalb der Anwendungen recht intensiv von XML Gebrauch, weshalb Sie auch mit XML vertraut sein sollten. Sie müssen aber kein Experte in diesen Sprachen sein.
Sie benötigen auch kein Android-Gerät, da alle in diesem Buch erstellten Applikationen im Emulator funktionieren.
Wie dieses Buch aufgebaut ist
Android App Entwicklung für Dummies besteht aus fünf Teilen, die ich in den folgenden Abschnitten beschreiben werde.
Teil I: Android-Grundlagen
In Teil I werden die von Ihnen bei der Entwicklung von Android-Anwendungen verwendeten Tools und Frameworks vorgestellt. Hier werden auch die verschiedenen SDK-Komponenten und deren Einsatz im Android-Entwicklungssystem erläutert.
Teil II: Ihre erste Android-App erstellen und veröffentlichen
In Teil II werden Sie Ihre erste Android-Applikation schreiben, Silent Toggle Mode, einen Umschalter in den stummen Modus. Nach Fertigstellung der Rohanwendung werden Sie dafür ein Steuerelement erstellen, das auf dem Startbildschirm eines Android-Geräts abgelegt werden kann. Anschließend werde ich Ihnen zeigen, wie Sie Ihre Anwendung im Google Play Store genannten Marktplatz für Android-Apps veröffentlichen können.
Teil III: Eine umfassende App erstellen
Teil III stellt dann etwas höhere Anforderungen an Ihre Fähigkeiten und zeigt Ihnen schrittweise die Erstellung einer Anwendung, mit der Sie Termine für Aufgaben festlegen und sich daran erinnern lassen können. Im Rahmen dieser aus mehreren Bildschirmen bestehenden Anwendung werden Sie auch eine SQLite-Datenbank implementieren. Zudem werden Sie erfahren, wie Sie in der Android-Statusleiste Meldungen anzeigen lassen und die Benutzerfreundlichkeit Ihrer Anwendungen damit steigern können.
Teil IV: Bei Android geht es nicht etwa nur um Telefone
In Teil IV werden wir die in Teil III erstellte App noch ein wenig optimieren, um sie auch auf anderen Geräten sinnvoll nutzen zu können, wie beispielsweise Tablets, Wearables, Fernsehgeräten und dem Amazon Fire.
Teil V: Der Top-Ten-Teil
In Teil V erhalten Sie einen Überblick über Beispielanwendungen, die sich als phänomenale Einstiegshilfen für Ihre eigenen Android-Apps erweisen können, und ich werde Ihnen nützliche Android-Bibliotheken vorstellen, mit denen Sie sich Ihr Leben als Android-Entwickler erheblich erleichtern können.
Symbole, die in diesem Buch verwendet werden
Wie es weitergeht
Nun ist es an der Zeit, die Android-Plattform zu erforschen! Sie können Ihre Scheu ablegen und loslegen. Ein wenig Nervosität ist angesichts des aufregenden neuen Themas aber sicherlich verständlich.
Wenn Sie nicht gerne tippen: Sie können die vollständigen Quelltexte auf den Dummies-Webseiten herunterladen – www.wiley-vch.de/publish/dt/books/ISBN3-527-71149-X.
Über den Autor
Michael Burton ist der leitende Android-Entwickler bei Groupon. Er hat beispielsweise die Android-Apps Groupon, Digg, TripIt und OpenTable erstellt. Eines seiner Projekte ist mit dem Space Shuttle in den Weltraum gereist. Er hat bei Konferenzen in London, Boston, Silicon Valley, Rio de Janeiro und anderen Orten Reden über die Android-Anwendungsentwicklung gehalten. Und er ist der Autor von RoboGuice, dem Open-Source-Dependency-Injection-Framework, das beispielsweise von Google und Facebook verwendet wird. Folgen Sie Michael Burton auf Twitter (@roboguice) oder sehen Sie sich RoboGuice unter http://roboguice.org an.
Widmung
Für BugDroid.
Danksagung
Großer Dank gebührt Donn Felker, der die ursprüngliche Version dieses Buches verfasst und mir das Projekt dann überlassen hat. Hoffentlich werden wir zukünftig noch bei vielen erfolgreichen Projekten zusammenarbeiten können!
Ein großes Dankeschön geht auch an die erweiterte Open-Source-Gemeinde rund um Android und insbesondere Carlos Sessa, Manfred Moser, Donn und Jake Wharton, die mit ihrem Code, ihren Kenntnissen und ihrer Kritik zu diesem Buch beigetragen haben.
Dank gilt auch meinem Team bei Groupon und damit Chris, Alex, Robyn, Eric, Aubrey und David, die mir dabei geholfen haben, die Android-Plattform besser zu verstehen, als es mir allein möglich gewesen wäre.
Und schließlich will ich auch meinen Freunden und meiner Familie danken, die mich während der Abende meiner Arbeit an diesem Projekt unterstützt haben. Die Gesellschaft unseres Welpen und ein paar belohnende Leckereien für fertige Kapitel haben mir wirklich über diese langen Wochenenden hinweggeholfen!
1
Spektakuläre Android-Apps entwickeln
In diesem Kapitel
Gründe für die Entwicklung von Android-Apps erkennen
Erste Schritte in der Android-Programmierung unternehmen
Mit der Hardware arbeiten
Sich mit der Software vertraut machen
Google ist Spitze! Google übernahm 2005 die Android-Plattform (siehe Kasten »Die Wurzeln von Android« weiter hinten in diesem Kapitel), um ein Betriebssystem für Mobilgeräte zu entwickeln und es als offene Plattform zur Verfügung zu stellen. Google investiert weiterhin Zeit und Ressourcen in das Android-Projekt. Obwohl es die Geräte erst seit Oktober 2008 gibt, wurden mittlerweile über eine Milliarde Android-Geräte aktiviert, und täglich kommen mehr als eine Million hinzu. Innerhalb weniger Jahre konnte Android riesigen Einfluss gewinnen!
Nie war es für Android-Entwickler einfacher, Geld mit der App-Entwicklung zu verdienen. Android-Anwender vertrauen Google. Und da Ihre App im Google Play Store angeboten wird, sind auch viele Anwender bereit, Ihrer App zu vertrauen.
Warum für Android entwickeln?
Die Frage sollte eigentlich »Warum nicht für Android entwickeln?« lauten. Wollen Sie, dass Ihre App weltweit für Millionen Anwender verfügbar ist? Wollen Sie Apps sofort nach Abschluss der Entwicklung und Tests veröffentlichen? Gefällt es Ihnen, für offene Plattformen zu entwickeln? Wenn Sie eine dieser Fragen bejaht haben, dürften Sie die Antwort kennen. Sollten Sie aber noch unentschlossen sein, lesen Sie einfach weiter.
Marktanteil
Als Entwickler können Sie Apps für einen boomenden Markt entwickeln. Die Anzahl der genutzten Android-Geräte ist größer als die Anzahl aller Geräte unter anderen Betriebssystemen für Mobilgeräte zusammen. Über den Google Play Store gelangt Ihre App direkt und einfach zum Anwender. Die Anwender müssen nicht das Internet nach zu installierenden Apps durchsuchen. Sie müssen nur den auf ihren Geräten vorinstallierten Google Play Store nutzen, um an alle Ihre Apps zu kommen. Da der Google Play Store auf den meisten Android-Geräten vorinstalliert ist (ein paar Ausnahmen sind in Kapitel 19 aufgelistet), suchen Anwender üblicherweise erst einmal im Google Play Store nach von ihnen benötigten Apps. Es ist daher gar nicht so ungewöhnlich, wenn die Anzahl der Downloads einer App binnen weniger Tage förmlich explodiert.
Zeit für die Vermarktung
Angesichts all der APIs (Anwendungsprogrammierschnittstellen – Application Programming Interfaces), die sich mit im Lieferumfang von Android befinden, lassen sich innerhalb relativ kurzer Zeit umfassende Anwendungen entwickeln. Nach der Registrierung beim Google Play Store müssen Sie Ihre Apps nur noch hochladen und veröffentlichen. Im Unterschied zu den Marktplätzen anderer Mobilgeräte gibt es beim Google Play Store keine Genehmigungsverfahren für Apps. Sie müssen Ihre Apps nur entwickeln und veröffentlichen.
Offene Plattform
Das Android-Betriebssystem ist eine offene Plattform und damit an keinen Hardwarehersteller und/oder Anbieter gebunden. Wie man sich leicht vorstellen kann, konnte Android durch seine freie Verfügbarkeit schnell Marktanteile gewinnen. Nichts hält Sie davon ab, sich den Android-Quellcode anzusehen. Sie können ihn über https://source.android.com herunterladen. Durch den quelloffenen Code können Hersteller eigens angepasste Benutzeroberflächen oder auch Bedienoberflächen (UI – User Interface) erstellen und sogar neue Funktionen für bestimmte Geräte hinzufügen.
Gerätekompatibilität
Android läuft auf vielen Geräten mit unterschiedlichen Bildschirmabmessungen und Auflösungen, wie beispielsweise Uhren, Handys, Tablets, Fernsehgeräten und anderen. Zudem enthält es die Werkzeuge zur Entwicklung von Apps, die verschiedene Gerätetypen unterstützen. Wenn Ihre App beispielsweise nur mit einer Kamera an der Vorderseite des Geräts funktioniert, wird sie im Google Play Store nur bei Benutzung entsprechend ausgestatteter Geräte angezeigt. Diese Art der Hardwareerkennung wird bei Android Feature Detection genannt. (Mehr zur Veröffentlichung Ihrer Apps im Google Play Store erfahren Sie in Kapitel 8.)
Kombinierbarkeit (Mashups)
Wenn Sie zwei oder mehr Dienste kombinieren, um eine App zu erstellen, wird dies Mashup genannt. Sie können beispielsweise ein Mashup erstellen, wenn Sie die Kamera und die Ortungsdienste von Android nutzen, um ein Foto aufzunehmen, in dem die genaue Positionsangabe angezeigt wird. Oder Sie können die Map-API mit der Kontaktliste kombinieren, um all Ihre Kontakte in einer Landkarte anzeigen zu lassen. Die folgenden Mashup-Beispiele sollen Ihre Fantasie noch ein wenig stärker anregen:
Geolokation und soziale Netze: Nehmen wir an, Sie wollen eine App schreiben, die Ihren aktuellen Standort mittels geologischer Ortsbestimmung (Geolokation) über den gesamten Tag hinweg alle zehn Minuten auf Twitter meldet. Kein Problem. Dazu müssen Sie nur die Lokalisierungsdienste von Android und die Twitter-API eines Drittanbieters (zum Beispiel iTwitter) miteinander kombinieren.
Geolokation und Spiele: Ortsabhängige Spiele werden immer beliebter und bieten tolle Möglichkeiten, Anwender in Spiele einzubinden. Ein Spiel könnte als Hintergrunddienst laufen, den aktuellen Standort eines Spielers feststellen und diesen dann mit den Standorten anderer Anwender in derselben Gegend vergleichen. Befindet sich dann beispielsweise ein anderer Anwender in weniger als einem Kilometer Entfernung, könnte der erste Spieler benachrichtigt werden und ihn zum (Spiele-)Kampf herausfordern. Ermöglicht wird dies durch die leistungsfähigen Technologien von GPS und Android. Falls Sie daran interessiert sind, Spiele für Android zu entwickeln, lesen Sie unter https://developers.google.com/games/services/ nach. Dort finden Sie weitere Informationen über die Google-Play-Games-Services.
Kontakte und Internet: Angesichts der Vielzahl der verfügbaren nützlichen APIs lassen sich über die Kombination von Funktionen mehrerer APIs leicht umfassende Apps erstellen. Sie können beispielsweise die Namen aus Kontaktlisten und das Internet gemeinsam dazu benutzen, um Grußkarten-Apps zu erstellen. Sie könnten den Anwendern über Ihre App auch die Kontaktaufnahme mit sich erleichtern oder ihnen die Weiterleitung der App an Freunde ermöglichen. All dies ist mit den integrierten APIs machbar. (Mehr über APIs erfahren Sie im Abschnitt »Google-APIs« weiter hinten in diesem Kapitel.)
Grundlagen der Android-Programmierung
Sie müssen glücklicherweise nicht Mitglied des Mensa-Clubs sein, um Android-Apps programmieren zu können. Dass Java als Standardsprache dient, erleichtert die Android-Programmierung. Aber auch wenn sich Android-Programme relativ leicht schreiben lassen, ist der Programmcode im Allgemeinen nicht unbedingt ein Kinderspiel.
Auch wenn das Betriebssystem Android hauptsächlich aus Java-Code besteht, gibt es einige kleinere Teile des Frameworks, die nicht in Java geschrieben sind. Android-Apps verwenden neben Java auch kleine XML-Abschnitte. Daher sollten Ihnen für das vorliegende Buch auch die XML-Grundlagen halbwegs vertraut sein.
Java: Ihre Android-Programmiersprache
Android-Apps werden in Java geschrieben. Dabei handelt es sich zwar nicht um das ausgewachsene Java, an das die Entwickler für die Java-Unternehmensplattform (JEE – Java Platform, Enterprise Edition) gewöhnt sind, aber doch um eine für Android sehr praktische Java-Untermenge, die einige Klassen ausspart, die für Mobilgeräte sinnlos sind. Wenn Sie bereits Erfahrungen in Java gesammelt haben, sollten Sie sich im Bereich der App-Entwicklung für Android direkt heimisch fühlen.
Selbst wenn Sie kein Java-Referenzhandbuch griffbereit halten, können Sie, wenn Sie bestimmte Befehle nicht ganz verstehen, immer noch danach googeln, beispielsweise unter www.google.com oder www.stackoverflow.com. Da Java keineswegs neu ist, finden Sie für nahezu alle Einsatzzwecke eine Menge Beispiele im Web.
Activities
Android-Apps bestehen aus einer oder mehreren Activities. Ihre Android-App muss mindestens eine Activity enthalten, kann aber auch mehrere umfassen. Eine Activity ist eine Art Container für Teile der Benutzeroberfläche und den für deren Ausführung benötigten Code. Sie können sich Activities als einzelne Seiten Ihrer App vorstellen – eine Seite entspricht einer Activity. Activities werden in den Kapiteln 3 und 5 ausführlicher behandelt.
Fragmente
Bei den einzelnen »Seiten« einer Android-App handelt es sich um jeweils eigenständige Activities. In älteren Android-Versionen haben Sie ein Element, das Sie auf dem Bildschirm anzeigen wollten, direkt in der Activity-Klasse abgelegt. Diese Vorgehensweise funktionierte zufriedenstellend bei kleinen Smartphonebildschirmen, auf denen typischerweise nicht sonderlich viele Informationen gleichzeitig dargestellt werden können. Darauf lässt sich vielleicht eine Aufgabenliste oder ein zu bearbeitender Text anzeigen, beide Elemente gleichzeitig auf diesen kleinen Bildschirmen darzustellen, ist aber unmöglich.
Auf den Bildschirmen von Tablets haben Sie hingegen massig Platz. Hier ist es nicht nur sinnvoll, Benutzern eine Aufgabenliste auf dem Bildschirm anzuzeigen und sie diese auf derselben Seite bearbeiten zu lassen, es würde vielmehr sogar recht umständlich wirken, wenn man anders vorgehen würde. Die Bildschirme der meisten Tablets bieten einfach zu viel Platz, um sie mit einzelnen langen Listen oder einer Menge Leerraum zu füllen.
Unter Android lassen sich zwei Activities nicht so einfach gleichzeitig auf den Bildschirm bringen. Was also ist zu tun? Fragmente sind die Lösung.
Wenn Sie Fragmente benutzen, kann eine Liste die eine Hälfte des Bildschirms belegen, während der Bearbeitungsbereich die andere Hälfte benutzt. Wie Sie Fragmente in Ihrer Smartphoneanwendung nutzen können, werden Sie in Kapitel 9 erfahren. Wie Sie bei der Skalierung Ihrer App für Tablets vorgehen können, erfahren Sie dann in Kapitel 17.
Intents
Intents bilden den Kern des Nachrichtensystems von Android. Intents bestehen aus zwei Elementen:
Einer Aktion. Die allgemeine Aufgabe (Anzeigen, Bearbeiten, Wählen und so weiter), die nach dem Empfang eines Intents ausgeführt werden soll.
Daten. Die Daten, die von einer Aktion verarbeitet werden sollen, wie beispielsweise der Name eines Kontakts.
Intents werden zum Starten von Aktivitäten und für die Kommunikation zwischen den verschiedenen Teilen des Android-Systems genutzt. Applikationen können Intents senden und empfangen.
Messages mit Intents versenden
Wenn Sie einen Intent senden, handelt es sich dabei um eine Message (Systemnachricht), die Android mitteilt, dass es etwas geschehen lassen soll. Ein Intent könnte Android aus Ihrer App heraus zum Starten einer neuen Activity oder einer anderen App bewegen.
Intent-Filter registrieren
Nur weil Sie einen Intent versenden, muss noch lange nicht automatisch etwas passieren. Sie müssen einen Intent-Filter registrieren, der auf die Intents wartet und Android dann mitteilt, was es tun soll und ob die Task eine neue Activity oder eine andere App starten will. Wenn mehrere Empfänger (Receiver) mit einem bestimmten Intent etwas anzufangen wissen, kann ein Chooser (Auswahlmenü) erstellt werden, über den der Anwender entscheiden kann, mit welcher App eine Activity weiterverarbeitet werden soll. Ein Beispiel dafür ist die YouTube-App, die den Anwender entscheiden lässt, ob er Videos in der YouTube-App oder in einem Browser anzeigen will.
Verschiedene registrierte Receiver wie beispielsweise die Gmail- oder Hangouts-Apps wissen standardmäßig, was mit Intents zum Teilen von Bildern zu tun ist. Wenn es mehrere mögliche Intent-Filter gibt, wird dem Anwender ein Auswahlmenü angezeigt, in dem er gefragt wird, wie weiter vorgegangen werden soll: das E-Mail-Messaging verwenden oder eine andere Applikation, wie in Abbildung 1.1 gezeigt.
Abbildung 1.1: Ein Auswahlmenü (Chooser)
Cursorlose Steuerelemente
Anders als beim PC, bei dem Sie einen Zeiger mit der Maus über den Bildschirm schubsen, ersetzen Ihre Finger bei Android-Geräten nahezu alle Funktionen einer Maus. Und was ist mit dem Rechtsklick? Bei Android wird der Rechtsklick durch den Langdruck ersetzt. Wenn Sie Ihren Finger über längere Zeit hinweg auf eine Schaltfläche (auch Knopf für Linux-Anwender), ein Symbol oder den Bildschirm legen, wird ein Kontextmenü angezeigt.
Als Entwickler können Sie Kontextmenüs erstellen und ändern. Zudem können Sie bei Android-Geräten beispielsweise zwei Finger anstelle nur eines Mauszeigers verwenden. Denken Sie aber daran, dass Finger unterschiedlich groß sind, und entwerfen Sie Ihre Benutzeroberflächen entsprechend. Die Schaltflächen sollten groß genug sein und ausreichend Abstand untereinander haben, damit selbst Anwender mit riesigen Pranken Ihre Apps auf kleinen Smartphones und Tablets leicht bedienen können.
Views
Was ist denn das nun schon wieder? Bei einer View handelt es sich um ein Grundelement der Android-Benutzeroberfläche, einen rechteckigen Bereich auf dem Bildschirm, der Objekte anzeigt und Ereignisse verarbeitet. Views sind also grundlegende Bausteine von Android-Benutzeroberflächen, ganz ähnlich wie Absatz- oder Anker-Tags (<p> und <a>) Bausteine einer HTML-Seite sind. Einige Beispiele für Views, die in Android-Apps verwendet werden können, sind TextView, ImageView, Layout und Button, es gibt jedoch noch unzählige andere, die Sie auch unbedingt kennenlernen sollten. Und Sie können auch Ihre eigenen, benutzerdefinierten Views implementieren.
Es gibt also noch viel mehr Views, die auf Sie warten. Einzelheiten dazu finden Sie bei den Paketen android.widget und android.view in der Android-Dokumentation unter http://developer.android.com/reference/packages.html.
Hintergrundoperationen
In Android gibt es verschiedene Möglichkeiten, mehrere Operationen gleichzeitig ausführen zu lassen, ohne selbst Threads verwalten zu müssen (was jedoch generell nicht zu empfehlen ist). Wenn Sie Daten aus einer Datenbank laden, um diese auf dem Bildschirm anzuzeigen, verwenden Sie im Allgemeinen Loader. Loader übernehmen die Verwaltung der Hintergrund-Threads für Sie und überwachen außerdem Ihre Datenbank auf Änderungen, sodass Ihre Benutzeroberfläche aktualisiert wird, sobald sich Daten ändern. Weitere Informationen über Loader finden Sie in Kapitel 13.
Für andere Hintergrundoperationen könnten Sie beispielsweise die Klasse AsyncTask verwenden, um eine Operation als Hintergrund-Thread auszuführen. Mit AsyncTask können Sie einen Task im Hintergrund starten und sein Ergebnis an Ihren Vordergrund-Thread weitergeben, sodass Sie Ihre Benutzeroberfläche aktualisieren können. Damit erhalten Sie ein sauberes Programmiermodell für die asynchrone Verarbeitung.
Die asynchrone Verarbeitung sollten Sie für Tasks nutzen, deren Ausführung länger als nur ein paar Sekundenbruchteile dauert, also beispielsweise für die Netzwerkkommunikation (Internet) oder das Lesen/Schreiben von Daten auf Speichermedien. Wenn die Anwender auf die Ergebnisse Ihres Tasks warten müssen, sollten Sie einen asynchronen Aufruf und ein Element auf der Benutzeroberfläche verwenden, um ihnen mitzuteilen, dass gerade irgendetwas passiert.
Abbildung 1.2: Hier wird gemeldet, dass eine App nicht mehr reagiert.
Hintergrunddienste
Sie wissen möglicherweise, was ein Dienst (Service) ist, nämlich eine im Hintergrund laufende Anwendung, die nicht notwendigerweise eine Benutzeroberfläche besitzen muss. Klassische Beispiele sind die üblicherweise als Hintergrunddienst laufenden Antivirenprogramme. Auch wenn sie auf dem Bildschirm unsichtbar bleiben, wissen Sie doch, dass sie laufen.
Auch Android-Apps können Hintergrunddienste verwenden. Die meisten als Download im Google Play Store erhältlichen Audioplayer können Sie als Hintergrunddienst laufen lassen. Auf diese Weise können Sie beim Abruf Ihrer E-Mails oder der Erledigung anderer Aufgaben, für die der Bildschirm benötigt wird, weiter Musik hören.
Android Support Library
Natürlich macht es am meisten Spaß, Apps für die neuesten und leistungsstärksten Geräte zu entwickeln! Es kommt jedoch auch immer wieder vor, dass Sie ältere Geräte unterstützen müssen. Schließlich verwenden nicht alle Ihre Anwender garantiert immer die allerneueste Version von Android.
Glücklicherweise bietet Android aber auch hier eine Lösung. Sie können nämlich die Android Support Library benutzen, um Ihre Apps mit allen Geräten bis zurück in die Android-Steinzeit (etwa 2010 nach Christus) kompatibel zu machen.
Diese Hilfsbibliotheken unterstützen nicht nur Fragmente und Loader, sondern erweitern die alten Geräte auch um einige neuere APIs wie:
RecyclerView: Erzeugt eine endlos blätterbare View-Liste.
CardView: Eine »Karte«, die Sie mit einer RecyclerView nutzen können, um eine blätterbare Liste mit Karten in Ihren Apps zu erstellen.
ViewPager: Seiten nach links und rechts wischen.
ShareCompat: Zum Teilen aller möglichen Dinge mit Freunden.
Aktionsleiste
In der Aktionsleiste bringen Sie zahlreiche Schaltflächen und Menüs unter, die den Anwendern gestatten, mit Ihrer App zu interagieren. Die Aktionsleiste wird fast immer oben quer über den Bildschirm angezeigt – man kann sie also kaum übersehen. Abbildung 1.3 zeigt ein Beispiel für die Aktionsleiste der YouTube-App.
Abbildung 1.3: Die YouTube-Aktionsleiste für ein Android-Demovideo
Beachten Sie diese Elemente in der Aktionsleiste:
Aufwärts-Schaltfläche, App-Logo: Tippen Sie das App-Logo in der Aktionsleiste an, um eine Ebene aufwärtszugehen.
Seitentitel: Neben dem Symbol der Anwendung wird der Titel der aktuellen Seite in der Aktionsleiste angezeigt. Wenn sich auf der aktuellen Seite Ihrer App die Daten irgendwie filtern lassen, können Sie dort ein Dropdown-Menü einfügen, über das sich der Filter wechseln lässt.
Aktion: Am rechten Ende der Aktionsleiste können Sie verschiedene Aktionen sehen, die Benutzer ausführen können. In der YouTube-App in Abbildung 1.4 können Benutzer Videos zu einer Liste hinzufügen, sie weiterempfehlen oder nach weiteren Videos suchen. Für die Aktionsschaltflächen können Texte und/oder Symbole angezeigt werden. Sie können beliebig viele Aktionen hinzufügen. Aktionen, für die der Platz auf dem Bildschirm nicht mehr ausreicht, werden ganz rechts in ein Untermenü ausgelagert.
Kontext-Aktionsleiste (nicht gezeigt): Das Aussehen der Aktionsleiste kann geändert und an die jeweiligen Aktivitäten der Benutzer angepasst werden. Werden beispielsweise mehrere Elemente in einer Liste ausgewählt, können Sie die Standard-Aktionsleiste durch eine kontextbezogene Aktionsleiste ersetzen, um Benutzern die Auswahl auf der Grundlage dieser Elemente zu ermöglichen. Wenn beispielsweise mehrere Dateien gleichzeitig gelöscht werden können sollen, können Sie eine Löschen-Schaltfläche in die Kontext-Aktionsleiste aufnehmen.
Unter http://d.android.com/guide/topics/ui/actionbar.html finden Sie weitere Informationen über die vielseitigen Möglichkeiten, die dieses Element der Benutzeroberfläche in Ihren Apps bieten kann.
Abbildung 1.4: Audio-App mit Menü in der Aktionsleiste
Widgets und Benachrichtigungen
Möglicherweise wollen die Anwender auf Informationen Ihrer App zugreifen, ohne diese explizit zu starten. Denken Sie beispielsweise an die Gmail-App, die es den Anwendern ermöglicht, eine Vorschau auf ihre E-Mails in einer Benachrichtigung anzuzeigen, bevor sie die Gmail-App öffnen, oder wie Sie die aktuelle Zeit auf Ihrem Launcher anzeigen, ohne dass Sie die UhrApp öffnen müssen. Dies sind Beispiele für die Verwendung von Benachrichtigungen und Launcher-Widgets.
Launcher-Widgets: Widgets sind eine Art »Mini-Apps«, die Zugriff auf die Funktionalität Ihrer App direkt vom Launcher des Smartphones (auch als Startbildschirm bezeichnet) aus ermöglichen. Widgets sind in der Applikationsliste leicht zu finden. Sie können Informationen anzeigen, Schaltflächen und sogar Listenansichten enthalten, innerhalb derer ein begrenztes Wischen und Blättern möglich ist.
Benachrichtigungen: Benachrichtigungen in Android können erweitert und verkleinert werden, sodass mehr Informationen angezeigt werden können. Wenn Ihnen beispielsweise Ihre Mutter ein Foto ihres neuen Hündchens in einer Textnachricht zuschickt, lässt es sich direkt in der Benachrichtigung anzeigen, ohne dass dazu erst die App geöffnet werden müsste. In einer Benachrichtigung über eine neue E-Mail-Nachricht kann eine Vorschau des Nachrichtentextes angezeigt werden, sodass er direkt gelesen werden kann.
Zudem können Benutzer unabhängig von der benutzten App direkt auf Benachrichtigungen reagieren. Um beispielsweise auf eine Geburtstags-E-Mail Ihrer Oma zu antworten, müssen Sie nur noch »Antworten« in der Benachrichtigung antippen, um Gmail samt Editor zu starten und sich bei ihr bedanken zu können.
Hardwarefunktionen
Google hat eine Unmenge an Funktionen in Android integriert und stellt Entwicklern alle benötigten Werkzeuge zur Verfügung, um hervorragende und umfassende Apps für Mobilgeräte entwickeln zu können. Google macht es Ihnen leicht, die Funktionen der verfügbaren Hardwarekomponenten zu nutzen.
Um eine spektakuläre Android-App zu entwickeln, sollten Sie die Vorteile der verfügbaren Hardwarekomponenten nutzen. Aber verstehen Sie mich hier nicht falsch: Wenn Sie eine Idee für eine App haben, die ohne Hardwareunterstützung auskommt, dann ist auch das völlig in Ordnung.
Android-Geräte sind mit verschiedenen Hardwarekomponenten ausgestattet, die Sie im Rahmen Ihrer Apps nutzen können und die in Tabelle 1.1 im Überblick dargestellt werden.
Hardwarekomponente | Funktion |
Beschleunigungssensor | Registriert Bewegungen des Smartphones |
Bluetooth-Funk | Ermöglicht beispielsweise den Anschluss eines Bluetooth-Kopfhörers oder einer externen Tastatur |
Kompass | Stellt fest, in welche Richtung das Gerät zeigt |
Kamera | Nimmt Fotos oder Videoclips auf |
GPS-Empfänger | Ermittelt, wo sich das Gerät befindet |
Tabelle 1.1: Android-Gerätehardware
Die meisten Android-Geräte sind zwar mit den in den folgenden Abschnitten beschriebenen Komponenten ausgestattet, deren Leistungsdaten unterscheiden sich aber zum Teil erheblich. Da Android von Hardwareherstellern kostenlos vertrieben werden darf, wird es für eine breite Gerätepalette genutzt. Bei kleineren Herstellern kann daher bei den Geräten schon einmal die eine oder andere Komponente fehlen oder auch zusätzlich hinzukommen.
Android-Geräte sind in den verschiedensten Formen und Abmessungen erhältlich, wie zum Beispiel als Mobiltelefon, Tablet-PC, E-Book-Reader, Uhren, Fernsehgeräte und Autos. Die Android-Entwickler stellen Werkzeuge bereit, mit denen Sie leicht Apps für unterschiedlich dimensionierte und auflösende Bildschirme erstellen können. Und da Ihnen die Android-Entwickler bereits die wirklich schweren Aufgaben abnehmen, brauchen Sie sich auch in dieser Hinsicht keine Sorgen zu machen. Die Grundlagen der Unterstützung verschiedener Bildschirmabmessungen und Auflösungen finden Sie in Kapitel 4.
Touchscreen
Android-Mobiltelefone werden über Touchscreens bedient, die weitreichende Möglichkeiten zur Verbesserung der Bedienung der Apps bieten. Anwender können beispielsweise durch Antippen, Drehen, Ziehen, Wischen und Drücken mit einem oder mehreren Fingern ein Bild auswählen und vergrößern. Entwickler können in Apps sogar angepasste Gesten definieren, um sich noch mehr Möglichkeiten zu erschließen.
Android unterstützt auch Multitouch-Gesten, bei denen der gesamte Bildschirm gleichzeitig mit mehreren Fingern berührt wird.
Echte Schalter an Geräten sind nichts Neues. An vielen Android-Geräten (insbesondere Tablets) finden Sie aber neben einem Standby-Schalter nur noch einen Lautstärkeregler. Wenn Sie eine geeignete Benutzeroberfläche für Ihre App erstellen, können Sie beliebig aussehende Schaltflächen an einer beliebigen Stelle auf dem Bildschirm positionieren.
GPS
Wenn das Android-Betriebssystem mit dem GPS-Empfänger eines Geräts zusammenarbeitet, können entsprechend entwickelte Apps jederzeit den aktuellen Standort eines Anwenders feststellen. Sie können auch dessen Bewegungen und Ortswechsel aufzeichnen.
Ein weiteres nützliches Beispiel ist die Maps-App, mit der die Position des Anwenders auf einer Karte bestimmt und Wegbeschreibungen zu einem angegebenen Ziel angezeigt werden können. Mit Android und der GPS-Hardware können Sie auf einige Meter genau die jeweilige Geräteposition feststellen. Viele Apps nutzen diese Funktion, um angeben zu können, wo sich Tankstellen, Restaurants, Parkhäuser, öffentliche Toiletten oder andere interessante Einrichtungen befinden.
Beschleunigungssensor
Android unterstützt einen Beschleunigungssensor (Accelerometer), mit dem ermittelt werden kann, ob das Gerät bewegt oder geschüttelt wird und in welche Richtung es gedreht wird. Diese Informationen können Sie zur Steuerung Ihrer Apps nutzen.
Damit lässt sich beispielsweise feststellen, ob der Bildschirm gerade auf dem Kopf steht und Ihre App darauf reagieren sollte. Oder vielleicht wollen Sie ein Würfelspiel entwickeln, bei dem Ihre Anwender ihr Smartphone zum Wurf schütteln müssen. Durch derartige Funktionen heben sich Mobilgeräte von typischen Desktop-PCs ab.
SD-Speicherkarte
Android sorgt für alle für den Zugriff (Speichern und Laden von Dateien) auf die SD-Speicherkarte erforderlichen Funktionen. Bei vielen Mobiltelefonen und Computern lassen sich SD-Speicherkarten einsetzen und zur Speicherung von Daten nutzen. Wenn ein Gerät mit einer SD-Speicherkarte ausgerüstet ist, können Sie darauf alle von Ihrer App benötigten Dateien speichern und darauf zugreifen. Um den internen Gerätespeicher nicht unnötig für benötigte Zusatzressourcen zu verschwenden, können Sie diese oft auch ganz oder teilweise von einem Webhost herunterladen und auf SD-Karte speichern. Benutzer finden dies vielleicht besser und werden Ihre App dann nicht so schnell deinstallieren, um Speicherplatz für andere Apps freizumachen.
Softwarewerkzeuge
Beim Schreiben von Android-Apps stehen Ihnen verschiedene Werkzeuge zur Verfügung. In den folgenden Abschnitten werde ich Ihnen einige der beliebtesten Tools kurz vorstellen, die Sie im Rahmen Ihrer alltäglichen Android-Entwicklungsarbeit nutzen werden.
Internet
Dank der Internetfähigkeit von Android-Geräten lassen sich aktuelle Daten leicht abrufen. Als Anwender können Sie das Internet nutzen, um sich über die Anfangszeit des nächsten Films oder die Ankunftszeit der nächsten Straßenbahn zu informieren. Als Entwickler können Sie das Internet in Ihren Apps für den Zugriff auf aktuelle Wetterdaten, Nachrichten und Sportergebnisse nutzen. Sie können das Web aber (wie Pandora und YouTube) auch dazu benutzen, um dort die Symbole und Abbildungen Ihrer Apps zu speichern.
Audio- und Videounterstützung
Mit dem Android-Betriebssystem lässt sich in Ihren Apps auch Audio und Video spielend leicht nutzen. Dabei werden viele Standardformate unterstützt. Das Einbinden multimedialer Inhalte in Ihre Apps könnte kaum einfacher sein. Toneffekte, Anleitungsvideos, Hintergrundmusik, Videostreams und Audio aus dem Internet lassen sich problemlos zu Ihren Apps hinzufügen. Lassen Sie Ihrer Kreativität freien Lauf. Ihren Möglichkeiten sind kaum Grenzen gesetzt.
Kontakte
Ihre App kann auf die auf dem Gerät gespeicherten Kontaktdaten zugreifen. Diese Funktion können Sie nutzen, um Kontakte auf neue Weise oder einfach anders anzuzeigen. Vielleicht gefällt Ihnen die bereits vorhandene App zur Verwaltung der Kontakte nicht. Da Sie auf die auf dem Gerät gespeicherten Kontakte zurückgreifen können, hält Sie nichts davon ab, sich Ihre eigene App zu schreiben. Vielleicht kombiniert diese ja auch Ihre Kontakte mit dem GPS-System und benachrichtigt den Anwender, wenn er sich in der Nähe einer der Kontaktadressen befindet.
Sicherheit
Stellen Sie sich nur einmal vor, dass jemand eine App veröffentlicht, die Kontaktlisten durchsucht und sie komplett irgendwo auf einen Server überträgt, um die Daten dann für eigene Zwecke zu missbrauchen. Anhand dieses Gedankens sollte Ihnen klar geworden sein, warum den meisten Funktionen, die die Gerätekonfiguration ändern oder auf geschützte Inhalte zugreifen, speziell entsprechende Berechtigungen eingeräumt werden müssen. Angenommen, Sie wollen ein Bild aus dem Web herunterladen und auf der SD-Karte speichern. Dazu benötigen Sie eine Berechtigung für den Zugriff auf das Internet. Sie benötigen auch entsprechende Berechtigungen, um Dateien auf der SD-Karte speichern zu können. Zu Beginn der Installation einer App wird deren Benutzer darüber informiert, welche Berechtigungen sie erfordert. Dann kann er entscheiden, ob die Installation fortgesetzt werden soll. Um eine Berechtigung anzufordern, müssen Sie nur eine Zeile Code in die Manifest-Datei Ihrer App einfügen. (Manifest-Dateien werden in Kapitel 3 beschrieben.)
Google-APIs
Das Android-Betriebssystem lässt Sie nicht nur telefonieren, Kontakte verwalten oder Apps installieren. Es bietet weit mehr. Als Entwickler bieten sich Ihnen weitreichende Möglichkeiten. Sie können beispielsweise sogar Landkarten in Ihre Apps integrieren. Dazu brauchen Sie nur die Google-Maps-API.
Positionen in Landkarten kennzeichnen
Vielleicht wollen Sie eine App schreiben, die Ihren Freunden Ihren aktuellen Aufenthaltsort mitteilt. Für die Entwicklung eines Kartensystems könnten Sie entweder Hunderte Stunden Entwicklungszeit aufwenden – oder einfach die Google-Maps-API nutzen. Sie können die API einbinden und jede Menge Entwicklungszeit sparen, ohne dass es Sie auch nur einen einzigen Cent kosten würde. Mit der Maps-API können Sie fast alles nur über eine Adresse finden. Die Möglichkeiten sind schier grenzenlos. Zeigen Sie den Aufenthaltsort Ihrer Freundin, die nächste Bäckerei, die nächste Tankstelle oder andere Dinge über deren Adresse an.
Cloud-Messaging
Noch so ein obskurer Begriff! Beim Cloud-Computing befinden sich die Rechner, die irgendwelche Dienste bereitstellen, irgendwo in den »Wolken« (clouds), ohne dass sich ihr Standort (im Internet) genau ausmachen ließe. Sie könnten die Daten Ihrer App beispielsweise irgendwo in der Wolke (dem Internet) speichern und die benötigten Daten beim ersten Starten Ihrer App herunterladen. Was aber, wenn diese sich später ändern? Damit die App aktualisiert werden kann, muss sie darüber benachrichtigt werden. Dazu können Sie Ihrer App beziehungsweise dem Gerät vom Server aus im Web eine Mitteilung zukommen lassen (Cloud-to-Device Message), die dafür sorgt, dass es die aktualisierten Daten herunterlädt. Das funktioniert sogar, wenn Ihre App nicht läuft. Sobald das Gerät die Benachrichtigung erhält, sorgt es dafür, dass Ihre App gestartet wird, und leitet die entsprechenden Maßnahmen ein.