Apps für Android programmieren leicht gemacht!
Nachricht von Smartwatch ans Handy senden

Nachricht von Smartwatch ans Handy senden

Bereits vor einiger Zeit hatten wir gelernt, wie wir Nachrichten von unserem Smartphone auf unsere Smartwatch verschicken können.
Heute wollen wir den Spieß einmal umdrehen und nachrichten von unserer Smartwatch an das zugehörige Smartphone versenden.

Eines vorweg. In dem vorgegangenen Artikel haben wir einen Api Key und eine Verbindung zu Google benötigt, um Daten versenden zu können. Dieses mal werden wir keinen Api Key benötigen.
Smartwatch -> Smartphone = Kein Api Key benötigt
Smartphone -> Smartwatch = Api Key benötigt
Warum das so gelöst ist kann ich leider nicht sagen. Mich hat es auch ehrlich gesagt etwas verwundert.
Ich denke es hängt damit zusammen, dass die Smartwatch nicht ohne weiteres eine Verbindung zu Google aufbauen kann.

Dieser Artikel wird wieder in zwei Teile aufgeteilt sein. Einmal der zur Smartwatch und einmal einer zu dem Smartphone. Ich gehe davon aus, dass ihr bereits eine Smartwatch und Smartphone App in Android Studio erstellt habt.

 

Smartphone:

AndroidManifest.xml:

Als erstes müssen wir innerhalb der AndroidManifest.xml-datei festlegen an welche Klasse unsere gesendete Nachricht geschickt werden soll.
Wir öffnen die Datei und schreiben innerhalb des <application>-Tags:

<service android:name=".ListenerService" >
    <intent-filter>
        <action android:name="com.google.android.gms.wearable.BIND_LISTENER" />
    </intent-filter>
</service>

 

ListenerService Klasse:

Tja, da ist eine Klasse definiert, an die die Nachricht gesendet werden soll, aber es gibt noch gar keine Klasse mit diesem Namen.
Wir erstellen eine neue Klasse in der Smartphone App mit dem Namen „ListenerService“ und schreiben herein:

public class ListenerService extends WearableListenerService {
    
    @Override
    public void onMessageReceived(MessageEvent messageEvent) {
        if( messageEvent.getPath().equalsIgnoreCase( "/nachricht" ) ) {
            showToast(messageEvent.getData().toString());
        }
    }

    private void showToast(String message) {
        Toast.makeText(this, message, Toast.LENGTH_LONG).show();
    }

}

Wenn nun eine Nachricht mit dem Pfad/Thema „/nachricht“ ankommt, dann gibt das Smartphone die Nachricht aus. Die App muss vorher nicht gestartet sein.

 

 

Smartwatch:

Als nächstes machen wir uns an die Programmierung der Smartwatch App und damit dem Absenden der Nachricht.
Bitte beachtet, dass es sich hierbei um eine Fire-and-Forget Anfrage handelt. Es wird also nicht geprüft, ob die Nachricht jemals ankommt.

private String retrieveDeviceNode(final GoogleApiClient client) {
    client.blockingConnect(CONNECTION_TIME_OUT_MS, TimeUnit.MILLISECONDS);
    NodeApi.GetConnectedNodesResult result =
            Wearable.NodeApi.getConnectedNodes(client).await();
    List<Node> nodes = result.getNodes();
    if (nodes.size() > 0) {
        nodeId = nodes.get(0).getId();
    }
    return nodeId;
}

private void sendRequest(final String path, final String message) {
    final GoogleApiClient client = new GoogleApiClient.Builder(this)
            .addApi(Wearable.API)
            .build();

    final String nodeId = retrieveDeviceNode(client);

    if (nodeId != null) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                client.blockingConnect(CONNECTION_TIME_OUT_MS, TimeUnit.MILLISECONDS);
                Wearable.MessageApi.sendMessage(client, nodeId, path, message.getBytes());
                client.disconnect();
            }
        }).start();
    }

}

Um die Nachricht dann auch zu senden müssen wir schlussendlich lediglich die Funktion „sendRequest“ aufrufen und den Pfad „/nachricht“ mit der eigentlichen Nachricht aufrufen. In etwa so:

sendRequest("/nachricht", "Hello World!");

 

Marvin

Ich bin 23 Jahre jung und studiere zurzeit Wirtschaftsinformatik an der Georg-August-Universität in Göttingen. Ich bin ein Mensch, der sich neben der Programmierung noch für tausend andere Dinge interessiert, die mal mehr und mal weniger verrückt sind. Vor allem aber bin ich Feuer und Flamme mit der Programmierung von eigenen kleinen Apps und Programmen, die mein Leben bereichern.

Kommentar hinzufügen

*Pflichtfeld