MDXDave.de

Informatikstudent der TH Köln // Android + Coding

Laden...

Prüfen ob Android Wear Gerät verbunden

veröffentlicht vor 4 Jahren, am 29. November 2014  |  Android    App    Entwicklung      |  0 Kommentare

Auf einer Smartwatch mit Android Wear lassen sich viele schöne Dinge erledigen.

Wie man nun in der App auf dem Smartphone oder Tablet (oder mit was auch sonst unser Wearable gekoppelt ist) prüft, ob eine Smartwatch mit Android Wear verbunden ist um zum Beispiel zusätzliche Inhalte anzeigen zu lassen, zeige ich euch nachfolgend.

Als Hinweis sei noch gesagt, dass der nachfolgende Code nur prüft ob ein Wearable verbunden ist, dies kann also auch ein anderes Wearbale (Google Glass) o.ä. sein. Da es (zumindest für Endanwender) aktuell keine große Verbreitung anderer Wearables gibt, dürfte das zum aktuellen Zeitpunkt zu vernachlässigen sein.

Zunächst erstellen wir die globale Variable GoogleApiClient googleClient und erweitern unsere Activity um die Methode onStart() und onStop():

boolean wearableConnected = false;
GoogleApiClient googleClient;
@Override    
public void onStart(){
    super.onStart();        
    googleClient.connect();    
}
@Override
public void onStop(){
    super.onStop();
    if (null != googleClient && googleClient.isConnected())
        googleClient.disconnect();       
}

In der Methode onStart() verbinden wir unseren GoogleApiClient, in der Methode onStop() trennen wir die Verbindung, falls eine Verbindung besteht (und unser GoogleApiClient keine NPE wirft.

Als nächstes müssen wir unseren GoogleApiClient aber erst einmal definieren bzw. anlegen, dies geschieht in der onCreate()-Methode:

@Override    
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    googleClient = new GoogleApiClient.Builder(this)
        .addApi(Wearable.API)
        .build();
        [...]    
}

Damit haben wir alle Vorbereitungen getroffen, um den Status zu ermitteln. Dies geschieht über die NodeApi.getConnectedNodes()-Methode.

Theoretisch könnt ihr den nachfolgenden Code platzieren wo ihr möchtet, in meinem Fall packe ich ihn in die onStart():

PendingResult nodes = Wearable.NodeApi.getConnectedNodes(googleClient);
nodes.setResultCallback(new ResultCallback() {
    @Override    
    public void onResult(NodeApi.GetConnectedNodesResult result) {
        [...]    
    }
});

Innerhalb der Methode onResult() erhalten wir nun Informationen über alle verbundenen Nodes, sprich Wearables.

Um zu prüfen, ob ein Wearable verbunden ist, schauen wir einfach, ob die Node-Anzahl größer 0 ist:

wearableConnected = (result.getNodes().size() > 0);

Durch die Variable wearableConnected wisst ihr nun, ob ein Wearable verbunden ist oder nicht.

Der gesamte Code:

boolean wearableConnected = false;
GoogleApiClient googleClient;
@Override
public void onStart(){
    super.onStart();        
    googleClient.connect();
        
    PendingResult nodes = Wearable.NodeApi.getConnectedNodes(googleClient);
    nodes.setResultCallback(new ResultCallback() {            
        @Override            
        public void onResult(NodeApi.GetConnectedNodesResult result) {                
            wearableConnected = (result.getNodes().size() > 0);
        }        
    });   
}
@Override    
public void onStop(){        
    super.onStop();
    if (null != googleClient && googleClient.isConnected())            
        googleClient.disconnect();        
}
@Override
public void onCreate(Bundle savedInstanceState) {        
    super.onCreate(savedInstanceState);
    googleClient = new GoogleApiClient.Builder(this)                
        .addApi(Wearable.API)                
        .build();
        [...]    
}

Die Methode getDisplayName() eines einzelnen Node sollte laut Dokumentation einen lesbaren Namen anzeigen, aktuell wird jedoch die Node-ID ausgelesen, welche mit getId() auslesbar ist. Es gibt dazu bereits ein Ticket im Issue Tracker von Android!

Links: Android Wear (Android Developers) | Beispielprojekt auf Github