2014-07-07 27 views
5

Tôi muốn ứng dụng của mình hoạt động khác nếu thiết bị Android Wear hiện được kết nối. Cách dễ nhất để phát hiện điều này là gì?Cách dễ nhất để phát hiện xem thiết bị Android Wear có được kết nối với điện thoại không?

Tôi tin rằng bạn có thể sử dụng this method trong Dịch vụ của Google Play, nhưng điều đó có vẻ như rất nhiều chi phí chỉ để xem thiết bị có ở đó hay không. Còn cách nào khác không?

Trả lời

1

Bạn cũng có thể có giá trị boolean (nói mIsConnected) được đặt thành true trong onPeerConnected và false trong onPeerDisconnected.

Nếu bạn đang sử dụng WearableListenerService, các phương pháp này sẽ tự động được bao gồm và bạn chỉ cần ghi đè chúng: onPeerConnected (Node peer) và onPeerDisconnected (Node peer). Nếu bạn muốn làm điều này trong một Hoạt động hoặc một cái gì đó thay vào đó, chỉ cần thực hiện NodeApi.NodeListener, trong đó có những phương pháp đó. Đảm bảo thêm nó vào ứng dụng khách Google API của bạn (addListener(mGoogleApiClient, this)).

+0

Đây là vấn đề: onPeerConnected() hoặc onPeerDisconnected() được gọi nếu "kết nối xảy ra" hoặc "ngắt kết nối". Nhưng onPeerConnected() sẽ không được gọi nếu điện thoại được kết nối với đồng hồ trước khi ứng dụng bắt đầu. Và onPeerDisconnected() sẽ không được gọi nếu điện thoại bị ngắt kết nối khỏi đồng hồ trước khi ứng dụng bắt đầu. Vì vậy, dường như Wearable.NodesApi.getConnnectedNodes() chỉ là cách để "hỏi" dịch vụ về các nút được kết nối. – Fox

+0

Tôi đã thử nghiệm NodeListener (onPeerConnected và onPeerDisconnected) trên cả trình giả lập và thiết bị thực (Zen Watch 2). Trong khi các chức năng này được gọi trên trình giả lập mỗi lần kết nối/ngắt kết nối Android Wear, nó không xảy ra trên Zen Watch 2. Tôi không biết tại sao, nhưng tôi nghĩ giả lập có Dịch vụ Google Play mới nhất, nhưng Zen Watch 2 thì không. – Ken

2

NodeAPI thể kiểm tra xem thiết bị Android Wear của bạn và điện thoại được kết nối hoặc không theo một cách đơn giản như thế này:

Đây là chức năng gọi lại khi bạn gọi:

private void checkNodeAPI(){ 
    Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).setResultCallback(this, 1000, TimeUnit.MILLISECONDS); 
} 

// Callback

@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() là một chức năng không đồng bộ, do đó kết quả chỉ được trả lại sau một thời gian, bạn không thể tải ngay lập tức.

Tiếp nhận sự kiện khi một Android Wear kết nối/ngắt kết nối điện thoại của bạn, bạn có thể sử dụng chức năng này bên dưới để thêm người nghe:

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(); 
} 

Nhưng nghe này không phải luôn luôn kêu gọi một số thiết bị Android Wear.

+0

Ngoài ra còn có chức năng đồng bộ hóa: Wearable.NodeApi.getConnectedNodes (googleApiClient) .await() –

Các vấn đề liên quan