Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Apps für Android Wear Grundkurs

Nachrichten auf dem Smartphone empfangen

Testen Sie unsere 2016 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Wenn Nachrichten von der Smartwatch kommen, sollen Sie auch auf dem Smartphone empfangen und weiterverarbeitet werden. Wie das geht, sehen Sie hier.

Transkript

Ich habe hier eine App, die eigentlich aus zwei Apps besteht. Zuerst mal habe ich die App auf dem Smartphone. Hier habe ich vier Hotels, ich kann auf eins drauftippen, dann bekomme ich die Beschreibung des Hotels. Ich kann auch wieder zurückgehen und habe hier die Liste meiner Hotels. Im Quelltext sieht das so aus. Ich bin hier in der MainActivity meiner Smartphone-App. Hier unten in der OnCreate-Methode hänge ich an meinen ListView einen ItemClickListener an. Das heißt, wenn der Button angetippt wird, wird dieser Listener ausgelöst. Hier wird ein Intent erzeugt, der zur DetailActivity geht, und in den Intent wird noch ein Extra eingelegt, nämlich der Name der ausgewählten Stadt. Schauen wir kurz in die DetailActivity rein. Hier wird im Wesentlichen aus dem Intent der Name der Stadt wieder rausgeholt und die Beschreibung und ein Foto dieser Stadt werden angezeigt. Das Foto liegt hier bereits vor. Für jede Stadt ein entsprechendes Foto. Die beschreibenden Daten stammen von der Klasse DataProvider. Nun möchte ich folgendes erreichen. Wenn ich auf der Smartwatch eine dieser Städte auswähle, möchte ich gern hier auf dem Smartphone genau so reagieren, als würde ich hier auf die entsprechende Stadt drauftippen. Einen Teil der Aufgabe habe ich bereits gelöst. Und zwar im Wear-Modul in der Klasse MainActivity. Ich rolle das mal ein Stück hoch. Hier habe ich einen ButtonClickHandler und wenn einer der Buttons gedrückt wird, wird der Handler ausgelöst. Der Text, der auf dem Button draufsteht, ist der Name der Stadt. Dann habe ich hier unten eine Klasse WearableMessageApi, die mir wiederum eine Methode SendMessage bietet. der Name der Stadt wird in eine Folge von Bytes umgewandelt und dann abgeschickt. Wir sind also schon soweit, dass wir einen Text ans Smartphone senden. Jetzt müssen wir den Text auf dem Smartphone empfangen und entsprechend auswerten. Um die Nachricht auf dem Smartphone empfangen zu können, baue ich mir nun einen Service. Der läuft auf dem Smartphone und horcht auf eingehende Nachrichten. Ich habe da schonmal etwas vorbereitet. Und zwar eine Klasse namens ListenerServiceFromWear. Momentan macht das Ding noch gar nichts. Das einzige, was wir hier haben, ist eine Konstante namens Wear_Path mit einem Wert von /from-wear. Auf die Bedeutung des Strings komme ich gleich zu sprechen. Damit dieser Listener nun Nachrichten empfangen kann, gebe ich eine Oberklasse an, und zwar WearableListenerService. Dann gibt's eine Methode namens OnMessageReceived. Die überschreibe ich. Wie der Name dieser Methode schon andeutet, wird sie ausgelöst, wenn eine Nachricht reinkommt. Zuerst müssen wir herausfinden, ob tatsächlich die Nachricht gekommen ist, auf die wir warten. Nun kommt diese Konstante hier ins Spiel. Ich gehe nochmal zurück in die MainActivity meiner Smartwatch-App. An die Stelle, an der die eigentliche Nachricht versendet wird. Hier gibt es ebenfalls diese Konstante Wear_Path. Sie hat tatsächlich auch denselben Wert bekommen. Bevor die Nachricht versandt wird, wird diese Konstante, dieser String, hinten an die Nachricht angehängt. Das können wir jetzt nutzen um zu sehen, ob dies Nachricht auch die ist, auf die wir warten. Das sieht folgendermaßen aus. Ich hole mir vom MessageEvent den Pfad mit GetPath. Und ich teste, ob er mit meiner Konstante übereinstimmt. Wenn ja, bedeutet das, im Extra dieses MessageEvents ist der Name meiner Stadt enthalten. Also lege ich mir eine entsprechende Variable an, nenne sie City und dann schreibe ich hier: new string. Und als Parameter MessageEvent.getData. GetData liefert zwar den Namen der Stadt zurück, aber als ByteArray, daher muss ich daraus explizit einen String erstellen, indem ich new davorschreibe. Damit habe ich also den Namen meiner Stadt. Nun muss ich nur noch die DetailActivity öffnen, mir die entsprechenden Daten für die Stadt besorgen und das Ganze anzeigen. Das ist also genau das gleiche, was vorher schon in der normalen Smartphone-App passiert ist. Ich kann mir also einfach den Code dort holen, ihn kopieren und hier einfügen. Ich gehe in die MainActivity meiner Smartphone-App und habe hier unten den entsprechenden Code. Intent bauen, Hotelname, also Name der Stadt rausholen und dann die Activity starten, also die DetailActivity. Das kopiere ich mir so, wie es ist und übernehme das in meinem ListenerService hier an diese Stelle. Ja, den Import brauche ich natürlich. Ich muss hier noch ein bisschen aufräumen. Die Location des Hotels brauche ich nicht. Die will ich mir ja eben gerade erst besorgen. Die Zeile kann also weg. Und hier kommt natürlich nicht MainActivity.this rein, sondern einfach nur this. Als Extra packe ich noch mein City-Objekt rein, das ich mir gerade erzeugt habe. Also. Wenn auf dem Smartphone eine Nachricht angekommen ist, und die Nachricht tatsächlich für mich ist, dann hole ich mir aus der Nachricht den Namen Stadt raus baue mir einen Intent, der an die DetailActivity weiterleitet packe noch ein Extra rein, nämlich den Namen der Stadt, und dann starte ich den Intent. Nun sind wir fast fertig. Wir müssen nur noch eine Sache hinzufügen. Es besteht nämlich die Möglichkeit, dass meine App gar nicht läuft, wenn die Nachricht reinkommt. Damit die DetailActivity trotzdem geöffnet werden kann, muss ich hier in meinem Intent noch ein Flag setzen, und zwar heißt das Flag_Activity_New_Task. Hier setze ich noch ein zweites Flag. Nämlich Flag_Activity_Clear_Top. Das bedeutet, wenn die Activity schon angezeigt wird, wird sie entfernt und mit den neuen Daten befüllt und wieder dargestellt. So. Damit ist mein Service fertig. Er horcht darauf, dass eine Nachricht reinkommt. Wenn eine reinkommt, holt er den Namen der Stadt raus und startet DetailActivity, die dann die Informationen zu dieser Stadt anzeigt. Der Java-Code ist also fertig. Damit nun der Service gestartet wird, wenn die App deployed wird, muss ich ihn noch im Manifest anmelden. Ich öffne also die Manifest-Datei meiner Mobile-App. Meine Service-Deklaration setze ich hier unten hinter der letzten Activity ein. Ich schreibe also: Service. Als Android-Name gebe ich den Namen meiner Klasse an. Meine ListenerServiceFromWear-Klasse. Nun muss ich einen entsprechenden Intent-Filter definieren. Ich schreibe also Intent-Filter und muss jetzt die entsprechende Action angeben. Dazu schreibe ich Action. Diese Action hat einen Namen. Jetzt sind Sie ganz auf sich allein gestellt. Diesen Namen müssen Sie jetzt zu Fuß tippen ohne irgendwelches Autocomplete. Der Text heißt folgendermaßen: com.google.android.gms ... ... .wearable.message_received. Das ist eine Action aus den Google Play Services. Und schließen. Ich scroll mal etwas nach oben. Jetzt werden noch ein paar weitere Informationen benötigt. Deshalb kommt hinter das Action-Element noch ein Data-Element. Wir müssen folgendes angeben: Das Scheme setzen wir auf Wear. Dann brauchen wir den Host. Da gebe ich ein Sternchen an. Schließlich brauche ich noch das Path-Prefix. Genau das hatten wir schon in unserer Konstante definiert. Also /from-wear. Und zu. Damit haben wir nun alles zusammengebaut. Wir haben in unserem Manifest einen Service definiert. Dieser Service wird eingerichtet, wenn unsere App installiert wird. Der horcht auf eingehende Variable-Nachrichten und gibt sie weiter an unseren ListenerServiceFromWear. Hier gibt's die Methode OnMessageReceived. Dort kommt die Nachricht rein. Hier testen wir nochmal, ob es auch die richtige Nachricht ist. Und dann holen wir uns die Daten raus und starten damit die DetailActivity. Nun können wir das Ganze ausführen. Achten Sie darauf, dass Sie diese Smartphone-App auch tatsächlich in der Smartphone-Konfiguration ausführen. Also hier Mobile auswählen. So. Hier ist meine App auf der Smartwatch. Und hier ist mein Smartphone mit der Liste der Städte. Nun tippe ich auf der Smartwatch auf eine Stadt. Nehmen wir Paris. Und siehe da, auf dem Phone öffnet sich die DetailActivity mit den Daten für Paris. Jetzt tippe ich auf eine andere Stadt. Nehmen wir San Francisco. Auch jetzt werden die entsprechenden Daten dargestellt. Das heißt, die alte Activity wurde entfernt und mit den neue Daten wieder aufgebaut. Schließlich testen wir noch, ob das Ganze auch funktioniert, wenn die App gar nicht läuft. Dazu gehe ich aus der App komplett raus. Jetzt tippe ich wieder auf den Namen meiner Stadt und auch jetzt läuft wieder alles wie geplant. So haben Sie also eine funktionierende Datenverbindung zwischen den zwei Geräten und Sie können Nachrichten von der Smartwatch auf das Smartphone schicken und sie dort auswerten.

Apps für Android Wear Grundkurs

Erstellen Sie Anwendungen für das Internet der Dinge mit Android Wear.

2 Std. 39 min (29 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Hersteller:
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:19.08.2016

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!