Leseprobe-Apps für Elektroniker

Page 1

Stefan Schwark

Die zum Buch gehörenden Programmbeispiele zeigen die Grundlagen der Kommunikation mit externen Geräten zur Steuerung über SMS, E-Mails, das Netzwerk, Bluetooth oder den USB-Anschluss. In verschiedenen Projekten werden diese Programme praktisch genutzt und erläutert. Auch die Audioschnittstelle des Android-Smartphones wird zur Erzeugung von Signalen genutzt und als Eingang für ein Oszilloskop-Programm verwendet, das Spannungsverläufe auf dem Display darstellen kann. Anhand der gezeigten Beispiele lässt sich die Funktionsweise solcher Apps leicht nachvollziehen und es wird schnell klar, wie einfach man mit dem eigenen Smartphone oder Tablet auch steuern und messen kann.

SHARE

Elektor-Verlag GmbH 52072 Aachen www.elektor.de

Dieses Buch veranschaulicht anhand verschiedener Beispiele, wie man eigene Apps programmieren kann, um damit gekaufte oder selbst gebaute Elektronik auf unterschiedlichen Wegen anzusprechen.

DESIGN

ISBN 978-3-89576-294-9

Gerade im Elektronikbereich stellt sich daher fast zwangsläufig die Frage, wie man eigene Projekte mit Hilfe seines Smartphones ansprechen und steuern kann oder wie sich die mit selbst gebauter Hardware gemessenen Daten auf den hochauflösenden Displays darstellen lassen.

APPS FÜR ELEKTRONIKER

Stefan Schwark, 1967 in Aachen geboren, hat nach dem Abschluss seiner Ausbildung zum Informationselektroniker Elektrotechnik an der Fachhochschule in Aachen studiert. Anschließend arbeitete er mehrere Jahre als Hardwareentwickler und Programmierer bevor er sich im Jahre 2005 selbständig machte. Zu dieser Zeit begann er sich mit der Programmierung von Mobiltelefonen zu beschäftigen. Seit 2013 arbeitet er in der Entwicklung von Software für CNC-Maschinen.

Apps für Smartphones gehören mittlerweile vollkommen selbstverständlich zum Alltag und sind in täglich wachsender Zahl in den entsprechenden Stores kostenlos oder für wenig Geld zu haben. Jeder Smartphone-Besitzer nutzt sie und passt sein Gerät damit seinen individuellen Bedürfnissen an. Leider sind die wenigsten Apps auf die Bedürfnisse von Elektronikern zugeschnitten, ändern kann man sie auch nicht und über die Möglichkeiten des Datenklaus durch unseriöse App-Anbieter mag man kaum nachdenken.

APPS FÜR ELEKTRONIKER

APPS FÜR ELEKTRONIKER

MESSEN UND VISUALISIEREN MIT ANDROID

STEFAN SCHWARK

MESSEN UND VISUALISIEREN MIT ANDROID

Stefan Schwark LEARN

DESIGN

SHARE

LEARN

LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIG ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SH GN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIG ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SH


APPs für Elektroniker Messen und Visualisieren mit Android Apps

● von Stefan Schwark

an Elektor Publication LEARN

APPs fur Elektroniker.indd 3

DESIGN

SHARE

18-01-16 09:58


© 2016: Elektor Verlag GmbH, Aachen.

Alle Rechte vorbehalten.

1. Auflage 2016

Die in diesem Buch veröffentlichten Beiträge, insbesondere alle Aufsätze und Artikel sowie alle Entwürfe, Pläne, Zeichnungen und Illustrationen sind urheberrechtlich geschützt. Ihre auch auszugsweise Vervielfältigung und Verbreitung ist grundsätzlich nur mit vorheriger schriftlicher Zustimmung des Herausgebers gestattet. Die Informationen im vorliegenden Buch werden ohne Rücksicht auf einen eventuellen Patentschutz veröffentlicht. Die in diesem Buch erwähnten Soft- und Hardwarebezeichnungen können auch dann eingetragene Warenzeichen sein, wenn darauf nicht besonders hingewiesen wird. Sie gehören dem jeweiligen Warenzeicheninhaber und unterliegen gesetzlichen Bestimmungen. Bei der Zusammenstellung von Texten und Abbildungen wurde mit größter Sorgfalt vorgegangen. Trotzdem können Fehler nicht vollständig ausgeschlossen werden. Verlag, Herausgeber und Autor können für fehlerhafte Angaben und deren Folgen weder eine juristische Verantwortung noch irgendeine Haftung übernehmen. Für die Mitteilung eventueller Fehler sind Verlag und Autor dankbar. Koordination: Rolf Hähle Korrektorat: Kurt Diedrich, Alsdorf Umschlaggestaltung: Elektor, Aachen Satz und Aufmachung: D-Vision, Julian van den Berg | Oss (NL) Druck: WILCO, Amersfoort (NL) Printed in the Netherlands

ISBN 978-3-89576-294-9

Elektor-Verlag GmbH, Aachen www.elektor.de 149001-1/D

Elektor is part of EIM, the world’s leading source of essential technical information and electronics products for pro engineers, electronics designers, and the companies seeking to engage them. Each day, our international team develops and delivers high-quality content - via a variety of media channels (e.g., magazines, video, digital media, and social media) in several languages - relating to electronics design and DIY electronics. www.elektor.com

LEARN

APPs fur Elektroniker.indd 4

DESIGN

SHARE

18-01-16 09:58


Vorwort Was bewegt einen dazu, Apps für Android-Geräte zu programmieren? Diese Frage wurde mir in ähnlicher Form von einem Magazin gestellet, welches sich mit dem App-Markt und Android allgemein beschäftigt. Was ist der Grund, Software für kleine Mobilgeräte zu entwickeln? Obwohl mich die Frage zuerst erstaunt hat, vor allem von einem Android-Magazin, musste ich doch länger überlegen, was mich dazu bewegt hat, mit der App-Programmierung zu beginnen. Mit einiger Sicherheit war es nicht das Geld, denn Android-Programme zählen in der Regel nicht zu der Art von Software, die mit Lizenzkosten von mehreren Hundert oder gar Tausenden Euro zu vermarkten wäre. Wenn man vorhat, mit den eigenen Android-Programmen reich zu werden, indem man sie bei Google Play vertreibt, muss man entweder eine große Anzahl an Programmen oder eine der sehr begehrten Apps eingestellt haben. Das ist jedoch meistens nicht der Fall, sodass diese Möglichkeit nicht unbedingt real ist. Ein viel größerer Beweggrund war die technische Neugier, die mich erfasste, als ich das erste Mal eines dieser Smartphones in der Hand hielt. Dabei interessierten mich nicht einmal die vielen eingebauten Funktionen für die Kommunikation mit Facebook, Twitter und Co., sondern mich beeindruckten die Möglichkeiten, die ein solches Gerät mit einer geballten Ladung Technik bot, für die es vor gerade mal zwanzig Jahren wohl noch den Platz einer Garage gebraucht hätte. Also besorgte ich mir die Programmierumgebung, erstand ein Smartphone und legte los. Mit wachsender Begeisterung stellte ich fest, dass es relativ einfach ist, seine ersten Apps zu programmieren. Außerdem wurden die Geräte immer leistungsfähiger und eroberten immer mehr Lebensbereiche. Mittlerweile hat sich Android vom der ursprünglichen Anwendung schon sehr weit gelöst und ist als Betriebssystem in vielen Geräten der unterschiedlichsten Arten vertreten. Das eröffnet dem Programmierer natürlich auch viele neue Möglichkeiten, unterschiedliche Geräte mit eigenen Apps zu versehen und sie dadurch noch besser an seine Bedürfnisse anzupassen. Einer der großen Unterschiede ist die ständige Verfügbarkeit der eigenen Programme, da man sein Smartphone ja eigentlich ständig in Reichweite hat, was zumindest auf einen großen Teil der Nutzer zutrifft. Dadurch wird man wahrscheinlich auch komplett andere Anwendungsfelder finden, als das bei einem Desktop-Computer oder Laptop der Fall wäre. Andere Anwendungen kommen aufgrund bestimmter Einschränkungen der Geräte überhaupt nicht in Frage. Insofern stellt die Programmierung mobiler Geräte schon einen gewissen Sonderfall dar, da man es zum einen nicht mit Geräten mit Unmengen an RAM oder Prozessorleistung zu tun hat, zum anderen aber die Möglichkeit hat von seinem Mobilgerät jederzeit über das Internet auf Dienste jeder Art zuzugreifen. Vor kurzem sah ich im Internet ein Bild mit der Frage: „Wenn ein Mensch aus den 50er Jahren heute hier erscheinen würde, was wäre für ihn wohl am schwierigsten zu begreifen.“ Dieser Frage folgte die Antwort: „Das ich ein Gerät mit mir herumtrage, welches mir den

●5

APPs fur Elektroniker.indd 5

18-01-16 09:58


Zugang zum kompletten Wissen der Menschheit ermöglicht, es aber nur dazu benutze um Bilder von Katzen anzuschauen und mich mit absolut Fremden zu streiten.“ Dieser kleine Internet Joke bringt es schon ganz gut auf den Punkt. Wir tragen unheimlich leistungsfähige Geräte mit uns herum, die wir größtenteils nicht ausnutzen. Ich hoffe das ich mit diesem Buch ein klein wenig dazu beitragen kann, dies ein wenig zu ändern. In diesem Sinne wünsche ich viel Spaß und Freude beim Lesen und Programmieren.

Würselen der 06.08.2015

●6

APPs fur Elektroniker.indd 6

18-01-16 09:58


Über dieses Buch Dieses Buch soll eine Einführung in die Möglichkeiten darstellen, die das Android Framework zur Bewältigung von Steuerungs- und Visualisierungaufgaben bietet. Dabei sollen anhand der Beispiele verschiedene Lösungen demonstriert werden, um einen Einstieg in die App-Programmierung zu bekommen. Die Beispiele sind in den meisten Fällen relativ einfach gehalten um das Prinzip darzustellen, ohne dabei übermäßig langen Quellcode abdrucken zu müssen. Die Beipielprogramme können auch aus website zum Buch auf dem Elektor-Server (www.elektor.de) heruntergeladen werden. Die in diesem Archiv vorliegenden Projekte, können dann mit der Entwicklungsumgebung Android Studio geöffnet werden, mit der alle Beispiele in diesem Buch erstellt wurden. Die Leser, welche bereits Erfahrung mit der Programmierung haben, und die die ältere Entwicklungsumgebung Android Developer Tools beziehungsweise Eclipse verwenden, können den Quellcode per Copy und Paste in die Entwicklungsumgebung übernehmen. Einige Themen, wie die Programmierung einer Bluetooth- oder USB-Verbindung, würden den Rahmen eines solchen Buches wie diesem hier sprengen, wollte man sie in ihrer Gesamtheit beschreiben. In diesen Fällen soll jedoch zumindest ein Anfang gezeigt werden, von dem aus der interessierte Leser selber weiter arbeiten kann. Dazu kommt das Problem, dass viele Firmen ihre Lösungen, wie zum Beispiel USB-Bausteine für den Einsatz mit Android-Geräten, gerade erst auf den Markt bringen. Die meisten der beschriebenen Apps lassen sich im Emulator ausführen, der zusammen mit der Entwicklungsumgebung installiert wird. Lediglich bei bestimmten Hardwarefunktionen muss die App auf einem realen Gerät installiert werden, da der Emulator dies nicht leisten kann. Der Besitz eines Android-Gerätes ist also nicht unbedingt erforderlich, nur um die Beispiele ausführen zu können. Da die Android-Programmierung auf Java aufbaut und damit eine objektorientierte Programmierung ist, kann es für einen Beginner teilweise etwas verwirrend sein, wie mit Methoden, Klassen und Objekten umgegangen wird. Zu diesem Thema lassen sich jedoch im Internet wesentlich ausführlichere Darstellungen finden, als sie hier im Rahmen dieses Buches erklärt werden könnten. Demjenigen Leser, der vollkommen neu in diesem Bereich ist, sei hier eines der unzähligen Tutorials empfohlen.

●9

APPs fur Elektroniker.indd 9

18-01-16 09:58


Inhalt

Inhalt Vorwort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Über dieses Buch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Inhalt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Grundsätzliches zur Android-Programmierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Grundlagen der App-Programmierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Die Entwicklungsumgebung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Fertige Apps testen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Android Studio installieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Der SDK-Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Der AVD-Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Die erste App . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Eine App zur Messung der Lichtstärke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Android im Netzwerk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Webseiten anzeigen mit Android-Apps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Eine App für RSS-Newsfeeds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Apps mit Einstellungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Steuern von I/O-Baugruppen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Socket-Kommunikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Emails und Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 Steuern mit dem Audio-Ausgang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 Frequenzen generieren und ausgeben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 Ausgabe von PWM-Signalen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Ausgabe von Gleichspannung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 Medienwiedergabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 Signale mit dem Audioeingang erfassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Kommunikation über Bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Die Bluetooth-API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Bluetooth-Geräte verbinden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129

● 11

APPs fur Elektroniker.indd 11

18-01-16 09:58


APPs für Elektroniker - Messen und Visualisieren mit Android Apps

Fernsteuern per SMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 SMS Senden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 SMS empfangen und auswerten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 Apps professionell gestalten und veröffentlichen . . . . . . . . . . . . . . . . . . . . . . . . . . 149 Eine App für einen Startbildschirm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 Ein Easter Egg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 Apps aus einzelnen Activities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 Veröffentlichen im Play Store . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 Android Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 Programmstart beim Bootvorgang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 Notifications bei neuen Ereignissen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 Visualisieren mit Google Maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 Die Position auf der Karte darstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 Marker in der Karte platzieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 Android und USB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 Die USB-Schnittstelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 USB-Geräte erkennen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 Open Accessory Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 GPIO-Modul für Android-Geräte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 Nachwort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 Stichwortverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

● 12

APPs fur Elektroniker.indd 12

18-01-16 09:58


Grundsätzliches zur Android-Programmierung • Einleitung

Grundsätzliches zur Android-Programmierung Einleitung

Vor wenigen Jahren noch verband man mit dem Begriff Android Filmfiguren aus den Star Trek- und Star Wars-Filmen. Heute steht er für das am weitesten verbreitete Betriebssystem für Mobilgeräte. Android findet man auf Telefonen und Tablets. Es läuft als Betriebssystem in Fernsehern und Set-Top Boxen und verwandelt die normale Flimmerkiste in ein Smart TV. Autoradios benutzen es ebenso wie Uhren und begeisterte Hobbyelektroniker passen es an die verschiedenste Hardware an um es für eigene Projekte zu verwenden. Es ist abzusehen, dass sich diese Entwicklung in den nächsten Jahren fortsetzen wird. Immer mehr Geräte werden mit diesem Betriebssystem verfügbar sein. Das macht es umso interessanter sich mit der Programmierung dieser Geräte zu beschäftigen. Es ist jetzt bereits abzusehen, dass bei der kurzen Verwendungszeit eines Smartphones, die nicht mehr aktuellen Modell für wenig Geld erstehen lassen oder als abgelegtes Gerät von Verwandten oder Bekannten weitergegeben werden. Es handelt sich also nicht um ein teures Vergnügen, mit der Programmierung von Android Apps zu beginnen.

Bild 1: Das Smartphone steuert einen Modellrenner mit Elektroantrieb. Was aber soll man programmieren? Smartphones und Tablets stellen eine sehr leistungsfähige Hardware bereit. Sie verfügen über Internetanbindung und besitzen Bluetooth- und USB-Schnittstellen. Warum sollte man also nicht ein Smartphone zum Steuern einsetzen? Aufgrund seiner Fähigkeiten ist es wie geschaffen als Bedienterminal für Haus und Hof. Dies wird umso interessanter, da immer mehr Geräte über das Netzwerk erreicht werden können. Google selber hat sich durch den Kauf der Firma Nest, die intelligente Thermostate herstellt, in den Bereich der Homeautomation eingekauft. Hier ist also in der nächsten Zeit noch einiges zu erwarten.

● 13

APPs fur Elektroniker.indd 13

18-01-16 09:58


APPs für Elektroniker - Messen und Visualisieren mit Android Apps

In diesem Buch soll der Einsatz von Android-Geräten zur Visualisierung und zur Steuerung dargestellt werden. Dabei werden verschiedene Anwendungsfälle anhand von einfachen Beispielprogrammen beschrieben. Diese Programme zeigen verschiedene Möglichkeiten um das Android-Gerät mit anderen Geräten kommunizieren zu lassen und mit einer eigenen App zu steuern. Dazu gibt es in einem normalen Haushalt schon eine Vielzahl an Möglichkeiten. Sie besitzen einen DSL-Router? Schreiben sie sich doch eine App zur Konfiguration des Geräts. Oder sie haben eine IP-Webcam an ihrem Haus angebracht? Dann wäre doch eine App zur Anzeige und Einstellung der Webcambilder eine Möglichkeit. Es gibt mehr Möglichkeiten als man zunächst annimmt. Die Beispielprogramme sind bewusst einfach gehalten. Der Quellcode der Beispiele ist kommentiert, da sich die Funktionsweise so am einfachsten nachvollziehen lässt. Die einzelnen Apps können auch als Teile einer App mit einer Vielzahl an Funktionen verwendet werden. Jede lässt sich aber als einzelnes Programm verwenden und testen. Damit mit den Apps auch etwas gesteuert werden kann, braucht man natürlich auch Geräte, die den Steuerungsteil übernehmen und von der App angesprochen werden können. Viele Schaltgerätehersteller haben das bereits erkannt und bieten im Handel Geräte an, die im Sicherungskasten montiert oder in die Steckdose gesteckt werden können. Viel interessanter und auch kostengünstiger ist es, eine eigene Lösung zu finden. Dafür eignen sich die mittlerweile in großer Menge angebotenen Boards, die für wenig Geld die Funktionen eines Computers zur Verfügung stellen. Ein Beispiel hierfür sind die vielen Arduino- und Raspberry Pi-Projekte, die sich im Internet finden lassen. Beim Raspberry Pi handelt es sich um einen kleinen Einplatinencomputer der mit einem Linux betrieben wird. Durch seinen günstigen Preis eignet er sich hervorragend, um als Webserver und Gegenstück für unsere Apps zu dienen. Da Android ein Betriebssystem für Mobilgeräte ist, sind die Möglichkeiten etwas mit einem Gerät wie einem Smartphone oder Tablet anzusteuern naturgemäß sehr begrenzt. Die Geräte sind für diese Art Anwendung schlicht nicht gedacht und bis auf wenige Ausnahmen lässt sich mit einem Android-Gerät ohne zusätzlichen Hardwareaufwand kaum etwas direkt ansteuern. Die Stärke von Android liegt viel mehr in der Bereitstellung einer Benutzeroberfläche, die es ermöglicht eine optimierte eigene Oberfläche zu entwerfen und hier kleine Funktionen einzubauen, mit denen das Tablet oder Mobiltelefon über das Netzwerk oder andere Wege Verbindung mit den Geräten aufnimmt, die die eigentlichen Aufgaben ausführen.

● 14

APPs fur Elektroniker.indd 14

18-01-16 09:58


Android im Netzwerk • Webseiten anzeigen mit Android-Apps

Android im Netzwerk Webseiten anzeigen mit Android-Apps

Im letzten Beispiel haben wir bereits eins der vom Android-Framework zur Verfügung gestellten Komponenten kennengelernt. Das TextView, welches, wie der Name schon verrät, für die Anzeige von Text zuständig ist. Wie sieht es jetzt mit weiteren Inhalten, wie z.B. einer Webseite aus? Die bisherige Vorgehensweise legt ja nahe, dass es auch für andere Inhalte komplett fertige Objekte im Android-Framework gibt, mit denen es ebenso leicht ist, diese Inhalte in einer App darzustellen. Tatsächlich existiert eine Komponente namens WebView, welche genau für den erwähnten Zweck, nämlich die Anzeige von Webseiten, vorgesehen ist. Auch dieses Objekt lässt sich auf einfache Art und Weise in einer App verwenden und sorgt dafür, dass es mit nur wenigen Programmzeilen möglich ist, eine Webseite anzuzeigen. Um dies an einem Beispiel darzustellen, erstellen wir wieder ein neues Android-Projekt in der Entwicklungsumgebung. Dieses Projekt soll den Namen SimpleWebBrowser tragen, der wieder im ersten Fenster eingegeben wird. Alle anderen Einstellungen können wieder so bleiben. Nur im letzten Fenster des Assistenten ändern wir den Namen der MainActivity wieder ab. Hier wird nun WebViewActivity eingetragen, was als Layoutnamen dann activity_webview erzeugt. Werfen wir zuerst einen Blick auf das Layout-File, welches wir wieder für unsere Zwecke anpassen müssen. Der von Android Studio erzeugte Eintrag für das TextView kann gelöscht werden. Stattdessen setzen wir hier nun das WebView Objekt ein. <RelativeLayout xmlns:android=”http://schemas.android.com/apk/res/android” xmlns:tools=”http://schemas.android.com/tools” android:layout_width=”match_parent” android:layout_height=”match_parent” android:paddingBottom=”@dimen/activity_vertical_margin” android:paddingLeft=”@dimen/activity_horizontal_margin” android:paddingRight=”@dimen/activity_horizontal_margin” android:paddingTop=”@dimen/activity_vertical_margin” tools:context=”.WebViewActivity” > <WebView

android:id=”@+id/webView1”

android:layout_width=”fill_parent”

android:layout_height=”fill_parent”>

</WebView> </RelativeLayout>

Der oben stehende Quellcode zeigt, dass der WebView Eintrag nur aus den Zeilen für die ID und die Größe des Objekts besteht. Die strings.xml-Datei enthält in diesem Beispiel nur

● 35

APPs fur Elektroniker.indd 35

18-01-16 09:58


APPs für Elektroniker - Messen und Visualisieren mit Android Apps

den App-Namen, da wir auch hier wieder auf das Menü verzichten. Alles weitere schauen wir uns im Quellcode des Programms an. package com.androidexample.simplewebbrowser; // Die benötigten Pakete werden importiert import android.annotation.SuppressLint; import android.App.Activity; import android.os.Bundle; import android.webkit.WebView; // Die Klasse der WebViewActivity public class WebViewActivity extends Activity { @SuppressLint(“SetJavaScriptEnabled”) @Override // onCreate() wird aufgerufen wenn die Activity gestartet wird. */ public void onCreate(Bundle savedInstanceState) { // Die onCreate() Methode des Systems wird aufgerufen super.onCreate(savedInstanceState); // Das WebView wird instanziiert WebView webview = new WebView(this); // Das Layout wird auf dem Display angezeigt setContentView(webview); // JavaScript wird eingeschaltet webview.getSettings().setJavaScriptEnabled(true); // Die Google Suchseite wird aufgerufen webview.loadUrl(“http://www.google.de”); } }

Damit die App mit dem Internet arbeiten kann, muss die Erlaubnis erteilt werden auf das Internet zugreifen zu dürfen. Diese Einstellungen werden in der Datei AndroidManifest.xml vorgenommen.

● 36

APPs fur Elektroniker.indd 36

18-01-16 09:58


Steuern mit dem Audio-Ausgang • Frequenzen generieren und ausgeben

Steuern mit dem Audio-Ausgang Frequenzen generieren und ausgeben

In der Regel handelt es sich bei einem Android-Gerät um ein Mobiltelefon oder ein Tablet. Lassen wir mal Anwendungen beiseite, die sowieso auf einer eigenen Hardware mit I/OPorts laufen, so stellen wir fest, dass Android-Geräte über wenige Möglichkeiten verfügen um ohne das Zwischenschalten von speziellen Baugruppen irgendein Signal auszugeben, das ohne viel Hardware weiter verwendet werden kann. Eine Ausnahme stellt in diesem Punkt der Audio-Ausgang dar. Hier besteht die Möglichkeit Signale verschiedenster Arten zu erzeugen und diese später auszuwerten. Durch das Nachschalten eines Verstärkers kann das Signal auf einen Pegel gebracht werden, mit dem auch andere Baugruppen angesteuert werden. Es lohnt sich also, einen genaueren Blick hierauf zu werfen. Nehmen wir als erstes die Anwendung, die für diesen Ausgang vorgesehen ist: Die Ausgabe von Klängen, bzw. Frequenzen. Wenn wir eine ganz einfache Sinusfrequenz ausgeben, so enthält diese schon einige Informationen, welche ausgewertet und zu Steuerungszwecken verwendet werden können. Der einfachste Fall wäre ein simpler Schaltvorgang, indem man erfasst ob ein Signal da ist oder eben nicht. Verändern wir die Frequenz der ausgegeben Sinusschwingung, so können wir hierüber schon eine ganze Reihe von Informationen übertragen, indem wir das Signal zum Beispiel mit einem DTMF-Decoder-Baustein auswerten. Bei diesem Verfahren aus der Telefonwähltechnik werden immer zwei Frequenzen gleichzeitig erzeugt und damit können insgesamt sechzehn Informationen übertragen werden. Da die Erzeugung des Signals auf mathematischem Wege vor sich geht, ist es ohne weiteres möglich auch mehrere Frequenzen zu erzeugen. Dazu brauchen nur die beiden Kurven errechnet und addiert werden. Die folgende Tabelle zeigt die hierfür nötigen Frequenzen.

Frequenzen

1209 Hz

1336 Hz

1477 Hz

1633 Hz

697 Hz

1

2

3

A

770 Hz

4

5

6

B

852 Hz

7

8

9

C

941 Hz

*

0

#

D

Es gibt eine Menge Möglichkeiten dieses simple Signal auszuwerten und zu verwenden. Wie erzeugt man aber jetzt eine solche Sinusfrequenz? Dazu bietet Android den AudioManager an. Mit dieser Klasse kann ein Stream von Daten, wie er aus einer Datei oder einer Internetadresse gelesen wird, an die Audio-Schnittstelle übergeben werden. Da wir eine konstante Frequenz ausgeben wollen brauchen wir also eine Sinusfrequenz, die in einem

● 89

APPs fur Elektroniker.indd 89

18-01-16 09:58


APPs für Elektroniker - Messen und Visualisieren mit Android Apps

Datenformat vorliegt, das der AudioManager verarbeiten kann. Dieses Programmbeispiel zeigt, wie so etwas realisiert werden kann. Das Programm zeigt einen SeekBar auf dem Display, mit dem der Ausgangspegel des Signals eingestellt werden kann. Außerdem gibt es eine Voreinstellung für die Frequenz des Ausgangssignals. Die eigentliche Tonerzeugung findet in einem eigenen Thread statt, der beim Beenden des Programms ebenfalls beendet wird. Verzichtet man auf dieses Beenden, so wird auch nach Beendigung der App das Signal weiter ausgegeben. Hier ist also zunächst der Quellcode des Programms. package com.androidexample.stefan.frequenz; import android.media.AudioFormat; import android.media.AudioManager; import android.media.AudioTrack; import android.os.Bundle; import android.preference.PreferenceManager; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.view.Menu; import android.view.MenuItem; import android.widget.SeekBar; import android.widget.TextView; import android.widget.SeekBar.OnSeekBarChangeListener; public class FrequenzActivity extends Activity { SeekBar seekBar; TextView value; AudioTrack audioTrack; double frequency = 0; double level = 0; SharedPreferences sharedPrefs; final int duration = 10; // seconds final int sampleRate = 8000; final int numSamples = duration * sampleRate; final double sample[] = new double[numSamples]; final byte generatedSnd[] = new byte[2 * numSamples]; @Override protected void onCreate(Bundle savedInstanceState) { // onCreate() wird aufgerufen. super.onCreate(savedInstanceState); // Das Layout wird angezeigt.

● 90

APPs fur Elektroniker.indd 90

18-01-16 09:58


Kommunikation über Bluetooth • Die Bluetooth-API

Kommunikation über Bluetooth Die Bluetooth-API

Fast alle modernen Android-Geräte verfügen heute über einen eingebauten Bluetooth-Adapter. Schließlich erlaubt diese Technik die drahtlose Verbindung zwischen Geräten wie Headsets, Freisprecheinrichtungen und dem heimischen Computer. Auch der Austausch von Daten zwischen Mobilgeräten funktioniert meistens problemlos mit Hilfe dieser Kurzstreckenfunkverbindung. Bluetooth stellt eine Verbindung nach einem Server-Client Prinzip her. Das bedeutet, dass ein Gerät als Server arbeitet und auf eine eingehende Verbindung wartet während das andere Gerät als Client versucht die Verbindung zu initiieren. Damit die Geräte sich verbinden können, müssen sie füreinander sichtbar sein. Das bedeutet, dass das Bluetooth-Gerät eine generelle Anfrage beantwortet und so seine Bereitschaft zur Verbindung signalisiert. Wird diese Verbindung aufgebaut und durch die Eingabe eines Codes bestätigt, sind die Geräte gepaart. Damit werden sie in eine Liste mit gepaarten Geräten eingetragen und können sich mit den Geräten auf dieser Liste ohne erneuten Paarungsvorgang direkt wieder verbinden können.

Bild 34: Die Geräte, mit denen sich das Andoid-Gerät schon einmal verbunden hat, werdenautomatisch in die Geräteliste aufgenommen. Sind die Geräte nun miteinander verbunden, so können verschiedene Dienste zum Einsatz kommen. Eine der häufigsten Anwendungen dürfte die Verbindung mit einem Headset oder einer Freisprechanlage sein. Hierbei werden die digitalen Audiodaten an das Zielgerät gesendet und dort wiedergeben. Genauso möglich ist jedoch die Verbindung mit einem

● 123

APPs fur Elektroniker.indd 123

18-01-16 09:58


APPs für Elektroniker - Messen und Visualisieren mit Android Apps

Computer zum Datenaustausch oder die Verbindung mit einem virtuellen ComPort. Aufgrund der Vielzahl der verschiedenen Bluetooth-Dienste würde es den Rahmen dieses Buches sprengen, wenn dies hier alle behandelt werden würden. Die grundsätzlichen Bluetooth-Funktionen, wie Bluetooth Ein- und Ausschalten, die gepaarten Geräte anzeigen oder das Gerät sichtbar machen, lassen sich zwar noch recht einfach realisieren, die Kommunikation selber ist jedoch vergleichsweise anspuchsvoll. Sehen wir uns zunächst eine App an, die genau die Funktionen beherrscht, welche eben erwähnt wurden. Die Android-API stellt hierfür einige komplette Methoden zur Verfügung. Das folgende Programm zeigt ein Display mit mehreren Buttons und ein ListView, in dem die gepaarten Geräte angezeigt werden können. package com.androidexample.bluetoothexample; // Die benötigten Java Pakete import java.util.ArrayList; import java.util.Set; // Die Android Pakete für die App import android.os.Bundle; import android.app.Activity; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.content.Intent; import android.view.View; import android.view.View.OnClickListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.Toast; // Die Klasse der MainActivity public class MainActivity extends Activity { // Die Buttons werden deklariert private Button btnOn; private Button btnOff; private Button btnVisible; private Button btnlist; // Der BluetoothAdapter wird deklariert private BluetoothAdapter bluetoothAdapter; private Set<BluetoothDevice> pairedDevices; // Das ListView für die Anzeige der Geräte und Buttons

● 124

APPs fur Elektroniker.indd 124

18-01-16 09:58


Fernsteuern per SMS • SMS Senden

Fernsteuern per SMS SMS Senden

Obwohl SMS in Zeiten von Instant Messengern wie Whatsapp und Co. nicht mehr die bevorzugte Form für Textkommunikation ist - zumindest wenn man ein Smartphone benutzt - kann man doch darauf bauen, dass dieser Dienst von jedem noch so simplen Telefon beherrscht wird. Deswegen eignet sich diese Art der Kommunikation auch durchaus zur Steuerung von Ereignissen auf entfernten Geräten. Der Vorteil liegt hier darin, dass dieser Dienst auch funktioniert, wenn die Internetverbindung aus irgendeinem Grund nicht möglich oder zu langsam ist. Ein Beispiel wäre hier die Steuerung und Kontrolle von Ereignissen aus dem Urlaub im Nachbarland. Eventuell ist hier die Verbindung zum Internet wegen des Roamings zu teuer oder der Internetzugang muss mit Zusatzkosten erst noch aktiviert werden. Eine SMS ist hier hingegen ebenso einfach zu versenden wie zu Hause, wenn sie auch ein bisschen teurer ist, denn Roaminggebühren fallen auch hier an. Ein weiterer Vorteil liegt darin, dass man auch simple alte Mobiltelefone als Empfangsgerät nutzen kann. Dabei werden diese Telefone entweder als Modem für ein Steuerungssystem benutzt oder man programmiert sich sogar selber eine Anwendung, welche die SMS empfangen und auswerten kann. Diese Geräte können nämlich auch in Java programmiert werden. Das funktioniert zwar nicht ganz so einfach wie auf einem modernen Android-Handy, aber ist trotzdem ohne riesigen technischen Aufwand möglich. Da das Versenden einer SMS eine Standardfunktion auf jedem Telefon ist, hat man auch bei der Entwicklung des Android-Frameworks dafür gesorgt, dass diese Funktion ohne viel Programmcode realisiert werden kann. Betrachten wir zu diesem Zweck eine simple App zum Versenden von SMS. Die App besitzt zwei Eingabefelder für den SMS-Text und die Telefonnummer sowie einen Button mit dem die SMS versendet werden kann. Die Telefonnummer wird bei der Betätigung des ‘Senden’-Button auf eine sinnvolle Eingabe geprüft, beispielsweise wird überprüft, ob das Feld leer ist und keine Telefonnummer vorhanden ist. Ist alles korrekt, so wird die SMS versendet und eine Erfolgs- oder Fehlermeldung wird angezeigt. Hinterlegt man mehrere feste Texte und sendet diese über ein paar fest platzierte und einer Funktion zugeordnete Buttons, so lässt sich mit der gleichen Technik auch eine Fernsteuerung in der Art programmieren, wie sie im Kapitel über die Ansteuerung der Netzwerksteckdose dargestellt wurde. Der Quellcode für die SMS-App ist nachfolgend dargstellt. package sms.androidexample.com; // Die benötigten Android Pakete import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.PendingIntent; import android.content.BroadcastReceiver;

● 137

APPs fur Elektroniker.indd 137

18-01-16 09:58


APPs für Elektroniker - Messen und Visualisieren mit Android Apps

import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.telephony.SmsManager; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import sms.androidexample.com.R; public class SMSActivity extends Activity { // Hier stehen die Objekte, welche in der App Benutzt werden. public static final String ACTION_SMS_SENT = “com.example.android.apis. os.SMS_SENT_ACTION”; public EditText SMSText; public EditText Phone; public Button SendButton; @Override

/** onCreate() wird aufgerufen wenn die Activity gestartet wird. */ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Das Layout wird auf dem Display angezeigt. setContentView(R.layout.main); // Die Displayobjekte werden zugewiesen SMSText = (EditText) findViewById(R.id.editSMSText); Phone = (EditText) findViewById(R.id.editPhone); SendButton = (Button)findViewById(R.id.buttonSend); SendButton.setOnClickListener(btnSendListener); } // Dem Button wird ein onClick Listener zugewiesen. private OnClickListener btnSendListener = new OnClickListener() { public void onClick(View v){ // Zunächst wird geprüft ob es sich um eine sinnvolle Eingabe handelt. if (checkInput()) {

● 138

APPs fur Elektroniker.indd 138

18-01-16 09:58


Apps professionell gestalten und veröffentlichen • Eine App für einen Startbildschirm

Apps professionell gestalten und veröffentlichen Eine App für einen Startbildschirm

Beginnen wir nun selber eine App zu erstellen, die für uns auch einen kleinen Nutzen bringt. Wie wir im ersten Beispiel gesehen haben, erstellt die Entwicklungsumgebung eine kleine ‘Hallo Welt’-App, wenn wir eine neues Projekt in der IDE anlegen. Benutzen wir also diese Vorlage um das Ganze etwas zu erweitern. Bei der nun folgenden App handelt es sich um ein kleines Programm, welches für eine gewisse Zeit eine Graphik auf dem Display anzeigt und sich anschließend selber beendet. Eine solche Funktion ist als Splash Screen bekannt und bedeutet nichts anderes als das ein Startbildschirm vor dem eigentlichen User Interface auf dem Bildschirm angezeigt wird. Viele professionelle Programme nutzen eine solche Funktion aus den unterschiedlichsten Gründen. Zum einen ist es ein gewisser Werbe- und Marketinghintergrund, da dem Benutzer der App schon beim Start des Programms das Logo des Herstellers angezeigt wird. Es gibt aber durchaus noch andere Gründe, welche eine solche Funktion notwendig oder wünschenswert machen kann. Da wäre zum einen die direkte Rückmeldung der App, die dem Benutzer zeigt, dass das Programm gestartet wurde. Auch wenn vor dem Beginn eines Programms Daten gelesen oder berechnet werden sollen, kann man die Lade- bzw. Rechenzeit mit einer netten Graphik gut überbrücken. Die Tatsache, dass direkt nach dem Start eine Reaktion zu sehen ist, gibt dem Benutzer den Eindruck einer schnellen Reaktionszeit, auch wenn das eigentliche Programm noch gar nicht bereit ist. Man stelle sich eine App vor, die vor dem Start einige Daten laden muss und in dieser Zeit ein schwarzes Display anzeigt. Der gefühlte Eindruck wäre mit Sicherheit der einer sehr langsamen App. Wird hingegen diese Wartezeit durch ein nettes Startbild überbrückt, kommt dieser Eindruck gar nicht erst auf. Um eine solche App zu erstellen, beginnen wir genauso wie im ersten Beispiel und erstellen zunächst ein neues Projekt in der Entwicklungsumgebung. In diesem Beispiel bekommt das Projekt den ApplicationName SplashScreen. Dieser Name wird auch hier als Projektname und als PackageName übernommen. Der automatisch erzeugte PackageName wird hier nun als com.example.splashscreen erscheinen und ein kleines Warndreieck anzeigen. Der Grund ist die Festlegung von Google, dass die Kombination com.example... reseviert ist und in eigenen Projekten nicht benutzt werden soll. Prinzipiell ist das für unsere Zwecke nicht relevant, aber wir halten uns an die Konventionen und benennen den Namen um in com.androidexample.splashscreen, was das Warndreieck verschwinden lässt. Die anderen Einstellungen für die benutzten SDK-Versionen können wieder angepasst werden, wenn die App nicht mit dem aktuellen SDK übersetzt werden soll oder auch mit einer älteren Version laufen sollen. Bei den Einstellungen für ein Theme wird hier None eingestellt, da die App eh den ganzen Bildschirm verwenden soll, und nichts außer einer Graphik anzeigen muss. Alle weiteren Einstellungen können wieder so bleiben. Nur den Namen für die MainActivity ändern wir noch in SplashScreenActivity. Eclipse passt daraufhin den Namen des verwendeten Layouts an diese Einstellung an und ändert diesen in activity_splash_screen.xml.

● 149

APPs fur Elektroniker.indd 149

18-01-16 09:59


APPs für Elektroniker - Messen und Visualisieren mit Android Apps

Auch diese App wird nun mit dem Rahmen des ‘Hallo Welt’-Programms erstellt. Wir müssen nun nichts weiter tun, als den Quellcode an unsere Bedürfnisse anzupassen. Beginnen wir mit dem Layout. Das von Eclipse erstellte Layoutfile besteht, wie wir gesehen haben aus einem Layoutrahmen und einem TextView. Wir möchten aber keinen Text sondern eine Graphik anzeigen, was das TextView so nicht kann. Wir müssen also das Layout so umschreiben, dass eine andere Komponente verwendet wird, die das Anzeigen von Bildern ermöglicht. Diese Funktion erfüllt das ImageView, welches wie der Name schon sagt, für die Darstellung einer Graphik vorgesehen ist. Wir löschen also zunächst das TextView aus dem Layout und ersetzen es durch ein ImageView. Dies kann entweder in dem graphischen Editor oder in der XML-Ansicht geschehen. Der XML-Code der Layoutdatei muss dazu wie in dem folgenden Listing gezeigt geändert werden: <RelativeLayout xmlns:android=”http://schemas.android.com/apk/res/android” xmlns:tools=”http://schemas.android.com/tools” android:layout_width=”match_parent” android:layout_height=”match_parent” android:paddingBottom=”@dimen/activity_vertical_margin” android:paddingLeft=”@dimen/activity_horizontal_margin” android:paddingRight=”@dimen/activity_horizontal_margin” android:paddingTop=”@dimen/activity_vertical_margin” tools:context=”.SplashActivity” > <ImageView android:id=”@+id/imageView1” android:layout_width=”wrap_content” android:layout_height=”wrap_content” android:layout_centerHorizontal=”true” android:layout_centerVertical=”true” android:contentDescription=”@string/desc” android:src=”@drawable/ic_launcher” /> </RelativeLayout>

Es wird ein ImageView mit der ID imageView1 erzeugt, dem als Bild das im Projektzweig res/drawable abgelegte Bild mit dem Dateinamen ic_launcher zugewiesen wird. Bei diesem Bild handelt es sich um das Standard-Icon der Android-App. Dies ist ein kleiner Androide, der nun bei unserer App in der Mitte des Displays angezeigt werden soll. Die anderen Anweisungen des ImageViews geben die Positionierung und die Größe an. Die contentDescription ist ein String, der in unserer Stringressourcendatei abgespeichert ist, und eine zusätzliche Beschreibung der Graphik darstellt. Die gesamte strings.xml-Datei enthält die folgenden Zeichenfolgen.

● 150

APPs fur Elektroniker.indd 150

18-01-16 09:59


Visualisieren mit Google Maps

Visualisieren mit Google Maps Eine der interessantesten Möglichkeiten der Visualisierung besteht in der Nutzung des Google Maps-Dienstes. Gerade wenn man mehrere Anlagen oder Systeme abfragt, die weit verteilt sind, bietet sich die Visualisierung über das Kartenmaterial von Google an. Auch wenn das System beweglich ist, kann die Anzeige der aktuellen Position auf der Landkarte eine nützliche Information sein. Aber schon wenn man ein etwas größeres Gelände betrachten will, wie etwa ein Firmengelände, ist die Anzeige auf einer Karte möglich, da die Auflösung des Google Maps-Dienstes dafür durchaus ausreichend ist. Nun reicht es für diesen Zweck aber nicht, einfach eine Anfrage an Google zu senden. Für die Nutzung des Dienstes erteilt Google einen API-Key, den man zunächst einmal im Internet erstellen muss. Man benötigt dazu einen Google Developer Account, den man sich zunächst erstellen muss sofern man ihn nicht schon besitzt. Hier wird dann ein neues Projekt angelegt, zu dem der API-Key zugeordnet wird. Wählt man bei der Erstellung eines neuen Projektes aus, dass es sich um eine Google MapsApp handelt, so weist Android Studio nach dem Erstellen des Projektes auf diesen API Key hin und zeigt eine Meldung an in der ein Link zu finden ist unter dem der Key erstellt werden kann. Man braucht nur diesem Link zu folgen und gelangt zu einer Webseite, auf der man einige grundlegende Angaben zu seiner App machen muss. Anschließend wird dann ein Key generiert, den man sich dann kopieren kann. Der gerade erstellte API-Key wird später in der AndroidManifest.xml eingetragen. Neben diesem Key benötigen wir noch die Libary für die Google Play-Dienste. Diese kann über den SDK-Manager installiert werden. Dazu muss aus dem Installationsbaum die passende Libary zum installierten Android Framework gewählt werden. Nach der Installation wird diese dann in den Projektabhängigkeiten für unsere APP eingetragen. Nachdem diese Vorbereitungen abgeschlossen sind, erstellen wir nun eine App, welche eine Karte anzeigt. Schauen wir uns dazu zunächst die Layout-Datei des Programms an. Diese enthält ein umfassendes Layout in dem ein Google Maps-Fragment positioniert wird. Diese Map füllt das gesamte Display aus und besitzt außer der Android-ID und dem Namen keine weiteren Eigenschaften. <?xml version=”1.0” encoding=”utf-8”?> <RelativeLayout xmlns:android=”http://schemas.android.com/apk/res/android” android:layout_width=”fill_parent” android:layout_height=”fill_parent” > <fragment android:id=”@+id/map” android:name=”com.google.android.gms.maps.MapFragment” android:layout_width=”match_parent” android:layout_height=”match_parent”/>

● 185

APPs fur Elektroniker.indd 185

18-01-16 09:59


APPs für Elektroniker - Messen und Visualisieren mit Android Apps

</RelativeLayout>

Der Code für die App ist nachfolgend zu sehen. Das Programm lädt nach dem Start das Layout für das Display und initialisiert dann die Anzeige der Map. Dabei können verschiedene Parameter eingestellt werden. So kann man beispielsweise auswählen, ob die Anzeige als Karte, Satellitenbild oder gemischt erfolgt. Auch die Anzeige der eigenen Position und der Zoom Buttons auf der Karte wird hier einoder ausgeschaltet. package de.androidexample.maps; // Die Android Pakete, die von der App verwendet werden. import android.app.Activity; import android.os.Bundle; import android.widget.Toast; // Hier folgen die Pakete aus der Google Lib. import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.MapFragment; import com.google.android.gms.maps.model.CameraPosition; import com.google.android.gms.maps.model.LatLng;

// Die Klasse der Activity public class MainActivity extends Activity { // Die Klasse verwendet eine Google Map. private GoogleMap googleMap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Das Layout wurde platziert, jetzt wird die Map eingerichtet. try { // Initialisiere die Google Map. if (googleMap == null) { googleMap = ((MapFragment) getFragmentManager().findFragmentById( R.id.map)).getMap(); // Wenn die Map nicht erstellt werden konnte, dann zeige eine Fehlermeldung if (googleMap == null) {

● 186

APPs fur Elektroniker.indd 186

18-01-16 09:59


Android und USB • Die USB-Schnittstelle

Android und USB Die USB-Schnittstelle

Nahezu alle Android-Geräte verfügen über einen USB-Anschluss. Diese Tatsache resultiert letzten Endes auch aus einer politischen Entscheidung der Europäischen Union, die festgelegt hat, dass die unterschiedlichen Netzadapter aus früheren Zeiten vom Markt verschwinden sollten. Dies sollte die unglaublichen Mengen Elektroschrott verringern, welche gerade im Mobilgerätebereich immer noch anfallen. Diese Entscheidung sorgte zumindest dafür, dass es mittlerweile standardisierte Ladeadapter gibt. Außer zur Stromversorgung wird der Anschluss auch für die Anbindung an den PC verwendet. Dabei wird das Mobilgerät - je nach Fähigkeiten - als einfacher Datenträger oder als komplexes Gerät mit mehreren Diensten erkannt. Beim USB (universal serial bus) handelt es sich um einen seriellen Bus. Die Datenübertragung erfolgt hier über zwei Leitungen. Die beiden anderen Anschlüsse sind für die Spannungsversorgung vorgesehen und liefern 5 V an das Peripheriegerät. In einer USB-Struktur können bis zu 127 Geräte zusammengeschaltet werden. Diese Baumstruktur kann durch das Zwischenschalten von USB-Hubs erweitert werden. Zwingend notwendig in dieser Struktur ist der zentrale Master-Controller, welcher die Koordination des Netzwerks übernimmt. Diese Rolle übernimmt in der Regel der angeschlossene PC. Ein Android-Mobilgerät ist in der Regel als Peripheriegerät konzipiert und deshalb nicht in der Lage die Rolle des Controllers zu übernehmen. Bei anderen Geräten wie z.B. einem Smart-TV oder einem Autoradio ist dies eingebaut, da diese Geräte dafür vorgesehen sind, eingesteckte Massenspeicher wie USB-Sticks zu erkennen und mit ihnen zu kommunizieren. Das ist nur möglich, wenn das Android-Gerät auch der Controller ist. Bei einem Mobilgerät ist es der umgekehrte Fall. Das Gerät wird mit einem PC verbunden damit Daten abgeglichen oder die neuesten Fotos gesichert werden. Trotzdem ist es möglich, eine immer größere Anzahl an Android-Geräten auch als USB-Host zu verwenden und damit auch einen USB-Stick, eine Festplatte oder weiteres Zubehör anzuschließen. Die Treiber für einige Geräte sind dabei im Android-Gerät enthalten. Will man allerdings Hardware anschließen, die das Gerät nicht kennt, dann ist es nötig hier einen entsprechenden Gerätetreiber zu erstellen und diesen auf dem Gerät zu speichern. Woher weiß das Android Gerät aber nun, ob es als Peripheriegerät oder als Controller arbeiten soll? Die Hersteller haben sich dazu einen kleinen Trick einfallen lassen. Die Lösung heißt USB-On the go. Geräte die diese Technik unterstützen, können ohne PC direkt mit anderen Geräten kommunizieren. Um Geräte in diesem Modus zu betreiben, ist ein sogenannter OTG-Adapter notwendig. Dieser Adapter besitzt an der einen Seite einen USBMicro Anschluss für das Mobilgerät und an der anderen Seite eine USB-Buchse für den Anschluss des Peripheriegerät. Es ist aber nicht nur ein einfaches Adapterkabel, sondern

● 197

APPs fur Elektroniker.indd 197

18-01-16 09:59


APPs für Elektroniker - Messen und Visualisieren mit Android Apps

besitzt auf der Seite des 5-poligen Steckers für das Mobilgerät eine Drahtbrücke zwischen zwei Anschlüssen, die dem Android Gerät signalisiert, dass es jetzt in den Host Modus gehen soll. Versucht man also ein solches Kabel aus einem alten USB-Anschlußkabel zu bauen, so wird das nicht funktionieren, solange diese Verbindung nicht eingebaut wird. OTG-Adapterkabel sind für wenig Geld im Handel erhältlich, so dass sich der Selbstbau wohl nur aus ganz speziellen Gründen lohnt. Mit welchen Geräten das Gerät nun kommunizieren kann, bzw. welche es überhaupt erkennt, hängt jetzt davon ab, ob das Android Gerät einen Treiber für die angeschlossene Peripherie kennt.

Bild 44:Eine einzige Drahtbrücke macht aus USB USB on the go. USB-Geräte erkennen

Das Android-Gerät kann USB-Geräte also nur dann erkennen, wenn sie auch beim System registriert sind und dementsprechend ein Treiber für das USB Gerät vorhanden ist. In der Regel ist die Menge der Treiber, welche vom Hersteller vorgesehen sind, relativ gering. Hier beschränkt man sich meistens auf die wesentlichen Standardgeräte. Das sind zum Beispiel Maus und Tastatur, die als normale Eingabegeräte erkannt werden. Da der OTG-Adapter nur einen USB-Anschluß zur Verfügung stellt, ist auch der Anschluss eines USB-Hubs ohne Probleme möglich. Verwendet man hier einen Hub, der über ein eigenes Netzteil verfügt, so kann man ohne den Akku des Mobilgerätes zusätzlich zu belasten eine Tastatur und Maus an ein Mobiltelefon anschließen. Das ist zugegebenermaßen etwas seltsam, betrachtet man mal die Größe der einzelnen Geräte. Trotzdem ist dies eine gute Möglichkeit um z.B. Unterwegs Texte einzugeben, wenn man nicht die Tastatur des Displays benutzen möchte. Schließt man eine Maus an sein Mobiltelefon an, so erscheint ein Mauszeiger und ermöglicht das Arbeiten mit diesem Eingabegerät. Neben den Eingabegeräten werden in der Regel auch Speichergeräte, wie etwa USB-Sticks von jedem Gerät erkannt. Das funktioniert dann mit allen Geräten, die einen Standard-Datenträger simulieren können. Das kann also auch eine Digitalkamera sein. Die dort gespeicherten Bilder können dann vom Android-Gerät importiert und dort betrachtet werden.

● 198

APPs fur Elektroniker.indd 198

18-01-16 09:59


Stichwortverzeichnis

Stichwortverzeichnis A AlarmReceiver AndroidManifest.xml

R 180 29, 36, 37, 49

API-Key

190

AppWidgetManager

173

appwidget.provider

177

Arduino Auswahlmenü

99 167

B BootUpReceiver Browser

Receiver

180

RSS Feed

41

RSSReaderActivity

41

S Shape String-Ressourcen

172 28

T 181 38

Task TextView Thread

194 28, 35 194

D Device Definition

24

F FTDI

U USB

200

USB-Peripherie

199

199 W

G

WebChromeClient

39

Google Maps

188

Webserver

40

GPS

189

WebView

L LocationListener

190

LocationManager

189

35

WebViewActivity

167

Widget

170

X XML-Deklaration

27

N Newsfeed NotificationManager

41 183

O onUpdate

172

Open Accessory Mode

199

OTG

197

OTG-Modus

199

P Play Store

170

Position

194

● 215

APPs fur Elektroniker.indd 215

18-01-16 09:59


Stefan Schwark

Die zum Buch gehörenden Programmbeispiele zeigen die Grundlagen der Kommunikation mit externen Geräten zur Steuerung über SMS, E-Mails, das Netzwerk, Bluetooth oder den USB-Anschluss. In verschiedenen Projekten werden diese Programme praktisch genutzt und erläutert. Auch die Audioschnittstelle des Android-Smartphones wird zur Erzeugung von Signalen genutzt und als Eingang für ein Oszilloskop-Programm verwendet, das Spannungsverläufe auf dem Display darstellen kann. Anhand der gezeigten Beispiele lässt sich die Funktionsweise solcher Apps leicht nachvollziehen und es wird schnell klar, wie einfach man mit dem eigenen Smartphone oder Tablet auch steuern und messen kann.

SHARE

Elektor-Verlag GmbH 52072 Aachen www.elektor.de

Dieses Buch veranschaulicht anhand verschiedener Beispiele, wie man eigene Apps programmieren kann, um damit gekaufte oder selbst gebaute Elektronik auf unterschiedlichen Wegen anzusprechen.

DESIGN

ISBN 978-3-89576-294-9

Gerade im Elektronikbereich stellt sich daher fast zwangsläufig die Frage, wie man eigene Projekte mit Hilfe seines Smartphones ansprechen und steuern kann oder wie sich die mit selbst gebauter Hardware gemessenen Daten auf den hochauflösenden Displays darstellen lassen.

APPS FÜR ELEKTRONIKER

Stefan Schwark, 1967 in Aachen geboren, hat nach dem Abschluss seiner Ausbildung zum Informationselektroniker Elektrotechnik an der Fachhochschule in Aachen studiert. Anschließend arbeitete er mehrere Jahre als Hardwareentwickler und Programmierer bevor er sich im Jahre 2005 selbständig machte. Zu dieser Zeit begann er sich mit der Programmierung von Mobiltelefonen zu beschäftigen. Seit 2013 arbeitet er in der Entwicklung von Software für CNC-Maschinen.

Apps für Smartphones gehören mittlerweile vollkommen selbstverständlich zum Alltag und sind in täglich wachsender Zahl in den entsprechenden Stores kostenlos oder für wenig Geld zu haben. Jeder Smartphone-Besitzer nutzt sie und passt sein Gerät damit seinen individuellen Bedürfnissen an. Leider sind die wenigsten Apps auf die Bedürfnisse von Elektronikern zugeschnitten, ändern kann man sie auch nicht und über die Möglichkeiten des Datenklaus durch unseriöse App-Anbieter mag man kaum nachdenken.

APPS FÜR ELEKTRONIKER

APPS FÜR ELEKTRONIKER

MESSEN UND VISUALISIEREN MIT ANDROID

STEFAN SCHWARK

MESSEN UND VISUALISIEREN MIT ANDROID

Stefan Schwark LEARN

DESIGN

SHARE

LEARN

LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIG ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SH GN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIG ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SHARE ● LEARN ● DESIGN ● SH


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.