2014-09-02 12 views
5

Zegarek Pebble ma cel, który jest wysyłany globalnie po podłączeniu/rozłączeniu Pebble. Dzięki temu aplikacje na telefonie będą wiedzieć, czy zegarek jest podłączony, czy nie. Szukałem, ale nie jestem w stanie znaleźć informacji o podobnej funkcji Androida Wear. Jak sprawdzić, czy do telefonu podłączony jest zestaw do noszenia? Czy możliwe jest otrzymanie wydarzenia podobnego do Pebble? DziękiWykryj podczas noszenia podłączonego/odłączonego do/z telefonu z Androidem

Odpowiedz

3

Możesz to łatwo zrobić, rozszerzając metodę WearableListenerService i zastępując metodę onConnectedNodes().

Wearable Side

public class DisconnectListenerService extends WearableListenerService implements GoogleApiClient.ConnectionCallbacks { 

/* the capability that the phone app would provide */ 
private static final String CONNECTION_STATUS_CAPABILITY_NAME = "is_connection_lost"; 

private GoogleApiClient mGoogleApiClient; 

@Override 
public void onCreate() { 
    super.onCreate(); 
    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .addApi(Wearable.API) 
      .addConnectionCallbacks(this) 
      .build(); 
} 

@Override 
public void onConnectedNodes(List<Node> connectedNodes) { 
    if (mGoogleApiClient.isConnected()) { 
     updateStatus(); 
    } else if (!mGoogleApiClient.isConnecting()) { 
     mGoogleApiClient.connect(); 
    } 
} 

private void updateStatus() { 
    Wearable.CapabilityApi.getCapability(
      mGoogleApiClient, CONNECTION_STATUS_CAPABILITY_NAME, 
      CapabilityApi.FILTER_REACHABLE).setResultCallback(
      new ResultCallback<CapabilityApi.GetCapabilityResult>() { 
       @Override 
       public void onResult(CapabilityApi.GetCapabilityResult result) { 
        if (result.getStatus().isSuccess()) { 
         updateConnectionCapability(result.getCapability()); 
        } else { 
         Log.e(TAG, "Failed to get capabilities, " + "status: " + result.getStatus().getStatusMessage()); 
        } 
       } 
      }); 
} 

private void updateConnectionCapability(CapabilityInfo capabilityInfo) { 
    Set<Node> connectedNodes = capabilityInfo.getNodes(); 
    if (connectedNodes.isEmpty()) { 
     // The connection is lost ! 
    } else { 
     for (Node node : connectedNodes) { 
      if (node.isNearby()) { 
       // The connection is OK ! 
      } 
     } 
    } 
} 

@Override 
public void onConnected(Bundle bundle) { 
    updateStatus(); 
} 

@Override 
public void onConnectionSuspended(int cause) { 

} 

@Override 
public void onDestroy() { 
    if (mGoogleApiClient.isConnected() || mGoogleApiClient.isConnecting()) { 
     mGoogleApiClient.disconnect(); 
    } 
    super.onDestroy(); 
    } 
} 

Telefon Side

utworzyć plik xml w wartościach/katalogu o nazwie wear.xml

<resources> 
    <string-array name="android_wear_capabilities"> 
     <item>is_connection_lost</item> 
    </string-array> 
</resources> 

uzyskać więcej kasy na moje rozwiązanie to Stack Overflow Question

+0

To nie jest odpowiedź na zadane pytanie ... powinien być oznaczony –

5

Czy próbowałeś NodeApi, można użyć getConnectedNodes

Pobiera listę węzłów, do którego jest aktualnie podłączone urządzenie.

lub addListener(GoogleApiClient client, NodeApi.NodeListener listener) który

Rejestruje słuchacza otrzymywać wszystkie zdarzenia węzłów.

Następnie można użyć wywołania zwrotne od NodeApi.NodeListener

onPeerConnected(Node peer) and onPeerDisconnected(Node peer) 
+1

Ale może być więcej niż jeden węzeł podłączony ... – powder366

4

Jak Akmal powiedział można dostać urządzeń, które są podłączone do telefonu, ale żeby wiedzieć, czy poręczny obecnie połączony z ręcznym

List<Node> connectedNodes = 
    Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).await().getNodes(); 

Lista zawiera następujące dane:

Node{Moto 360 6BBF, id=3b6d19bf, hops=1, isNearby=true} 
Powiązane problemy