2014-09-02 28 views
5

Đồng hồ Pebble có Intent được gắn trên toàn cầu khi Pebble được kết nối/ngắt kết nối. Điều này cho phép các ứng dụng điện thoại biết liệu đồng hồ có được kết nối hay không. Tôi đã tìm kiếm nhưng tôi không thể định vị thông tin về một tính năng tương tự cho Android Wear. Làm cách nào để biết thiết bị đeo được kết nối với điện thoại? Có thể nhận một sự kiện như với Pebble không? Cảm ơnPhát hiện khi kết nối có thể đeo/ngắt kết nối với/từ điện thoại Android

Trả lời

3

Bạn có thể dễ dàng thực hiện việc này bằng cách mở rộng phương thức WearableListenerService và ghi đè lên phương thứcConnectedNodes().

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

Side Điện thoại

tạo một file xml trong giá trị/thư mục có tên wear.xml

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

Để biết thêm, kiểm tra các giải pháp của tôi trong này Stack Overflow Question

+0

Đây không phải là câu trả lời cho câu hỏi được hỏi ... nên được gắn cờ –

5

Các bạn đã thử NodeApi, bạn có thể sử dụng getConnectedNodes

Gets một danh sách các nút mà thiết bị này hiện đang được kết nối.

hoặc addListener(GoogleApiClient client, NodeApi.NodeListener listener)

Đăng ký một người biết lắng nghe để nhận được tất cả các sự kiện nút.

Sau đó, bạn có thể sử dụng callbacks từ NodeApi.NodeListener

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

Nhưng có thể có nhiều hơn một nút được kết nối ... – powder366

4

Như Akmal nói rằng bạn có thể nhận được các thiết bị được kết nối với điện thoại, Nhưng để biết liệu wearable hiện đang kết nối với thiết bị cầm tay

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

Danh sách chứa dữ liệu như sau:

Node{Moto 360 6BBF, id=3b6d19bf, hops=1, isNearby=true} 
Các vấn đề liên quan