NodeAPI può verificare se il vostro dispositivo Android Wear e telefono siano collegati o meno in modo semplice come questo:
Questa è la funzione di callback quando si chiama:
private void checkNodeAPI(){
Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).setResultCallback(this, 1000, TimeUnit.MILLISECONDS);
}
// richiamata
@Override
public void onResult(NodeApi.GetConnectedNodesResult getConnectedNodesResult) {
if (getConnectedNodesResult != null && getConnectedNodesResult.getNodes() != null){
mWearableConnected = false;
for (Node node : getConnectedNodesResult.getNodes()){
if (node.isNearby()){
mWearableConnected = true;
}
}
}
Log.v("TEST", "mWearableConnected: " + mWearableConnected);
}
getConnectedNodes() è una funzione asincrona, quindi il risultato viene restituito dopo un po ', non è possibile ottenerlo immediatamente.
Per ricevere l'evento quando un Android Wear collega/scollega al telefono, è possibile utilizzare questa funzione per aggiungere di seguito ascoltatore:
Wearable.NodeApi.addListener(mGoogleApiClient, this);
@Override
public void onPeerConnected(Node node) {
Log.v("TEST", "onPeerConnected");
mWearableConnected = true;
}
@Override
public void onPeerDisconnected(Node node) {
Log.v("TEST", "onPeerDisconnected");
checkNodeAPI();
}
Ma questo ascoltatore non è sempre chiamato su alcuni dispositivi Android Wear.
Ecco un problema: onPeerConnected() o onPeerDisconnected() viene chiamato se "connect occured" o "disconnect occured". Ma onPeerConnected() non verrà chiamato se il telefono è connesso per guardare prima dell'avvio dell'applicazione. E onPeerDisconnected() non verrà chiamato se il telefono si disconnette dall'orologio prima dell'avvio dell'applicazione. Quindi, sembra essere Wearable.NodesApi.getConnnectedNodes() è l'unico modo per "chiedere" il servizio sui nodi connessi. – Fox
Ho testato NodeListener (onPeerConnected e onPeerDisconnected) sia sull'emulatore che sul dispositivo reale (Zen Watch 2). Mentre queste funzioni venivano chiamate su emulatore ogni volta che Android Wear si connetteva/disconnetteva, non si verificava su Zen Watch 2. Non so perché, ma penso che l'emulatore abbia l'ultimo servizio Google Play, ma Zen Watch 2 no. – Ken