2014-09-02 2 views
5

Часы Pebble имеют намерение, которое глобально изменяется, когда Pebble подключен/отключен. Это позволяет телефонным приложениям узнать, подключены ли часы или нет. Я искал, но я не способен найти информацию об аналогичной функции для Android Wear. Как узнать, подключен ли носитель к телефону? Можно ли получить такое событие, как с Pebble? БлагодаряОбнаруживать при подключении и подключении к телефону с телефона

ответ

3

Вы можете легко сделать это, расширив метод WearableListenerService и переопределив метод onConnectedNodes().

носимого 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(); 
    } 
} 

Телефон Side

создать файл XML в значениях/директории с именем wear.xml

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

Для более, проверка на мое решение в это Stack Overflow Question

+0

Это не ответ на заданный вопрос ... должно быть отмечено –

5

Вы пробовали NodeApi, вы можете использовать getConnectedNodes

Возвращает список узлов, к которому данное устройство в данный момент подключен.

или addListener(GoogleApiClient client, NodeApi.NodeListener listener), которые

Регистрирует слушателя получить все узловые события.

Затем вы можете использовать обратные вызовы из NodeApi.NodeListener

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

Но может быть более одного подключенного узла ... – powder366

4

Как Акмал сказал, что вы можете получить устройства, которые подключены к телефону, но знать, является ли носимых в настоящее время связано с портативной

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

Список содержит следующие данные:

Node{Moto 360 6BBF, id=3b6d19bf, hops=1, isNearby=true} 
Смежные вопросы