2014-11-19 2 views
3

앱을 만들었습니다. 이 응용 프로그램 내에서, 당신은 2 문자열 (이름과 나이)와 비트 맵 (아바타)을 포함하는 개체가 있습니다. 모든 것이 sqlite 데이터베이스에 저장됩니다.휴대 전화에서 Android웨어로 객체 공유

이제 스마트 시계에서 이러한 개체에 액세스 할 수있게하려고합니다. 그래서 저는 여러분이 시작하고, 응용 프로그램을 시작하고, 왼쪽과 오른쪽으로 스크롤하여 이러한 객체를 볼 수 있다는 것을 알리고 싶습니다.

이것은 휴대 전화에서 개체를 가져 와서 시계에서 가져와야 함을 의미합니다.

저는 현재 모든 일을 올바르게했는지, 아니면 다르게해야하는지 궁금합니다. 시계에서 응용 프로그램을 시작할 때마다 객체를 원한다는 요청을 전화로 보내고 있습니다.

private void sendMessage() { 
    if(mGoogleApiClient.isConnected()) { 
     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       NodeApi.GetConnectedNodesResult nodes = Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).await(); 
       for(Node node : nodes.getNodes()) { 
        Wearable.MessageApi.sendMessage(mGoogleApiClient, node.getId(), REQUEST_PET_RETRIEVAL_PATH, null).await(); 
       } 
      } 
     }).start(); 
    } 
} 

전화로이 메시지를 수신하고 메시지가있는 개체를 보내고 있습니다.

public void onMessageReceived(MessageEvent messageEvent) { 
    super.onMessageReceived(messageEvent); 

    if (messageEvent.getPath().equals(REQUEST_PET_RETRIEVAL_PATH)) { 


     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() { 
        @Override 
        public void onConnected(Bundle connectionHint) { 
         final PutDataMapRequest putRequest = PutDataMapRequest.create("/send-pets"); 
         final DataMap map = putRequest.getDataMap(); 

         File imgFile = new File(obj.getAvatar()); 

         Bitmap avatar; 
         if(imgFile.exists()) { 
          avatar = BitmapFactory.decodeFile(imgFile.getAbsolutePath()); 
         } else { 
          avatar = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); 
         } 

         Asset asset = createAssetFromBitmap(avatar); 
         map.putAsset("avatar", asset); 
         map.putString("name", obj.getName()); 
         map.putString("age", obj.getDateOfBirth()); 
         Wearable.DataApi.putDataItem(mGoogleApiClient, putRequest.asPutDataRequest()); 
        } 

        @Override 
        public void onConnectionSuspended(int cause) { 
        } 
       }) 
       .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() { 
        @Override 
        public void onConnectionFailed(ConnectionResult result) { 
        } 
       }) 
       .addApi(Wearable.API) 
       .build(); 
     mGoogleApiClient.connect(); 
    } 

시계에서 개체를 검색하고 있습니다.

public void onDataChanged(DataEventBuffer dataEvents) { 
    final List<DataEvent> events = FreezableUtils.freezeIterable(dataEvents); 
    for(DataEvent event : events) { 
     final Uri uri = event.getDataItem().getUri(); 
     final String path = uri!=null ? uri.getPath() : null; 
     if("/send-pets".equals(path)) { 
      final DataMap map = DataMapItem.fromDataItem(event.getDataItem()).getDataMap(); 
      String name = map.getString("name"); 
      String age = map.getString("age"); 

      Asset avatar = map.getAsset("avatar"); 
      Bitmap bitmap = loadBitmapFromAsset(avatar); 
     } 
    } 
} 

지금은이 질문에 붙어 :

1)이 길을 가야하는 것입니까 아니면 다르게 그것을 해결해야 하는가?

2) 한 번에 여러 개의 객체를 전송할 수 있습니까? 아니면 "onConnected"메소드에서 부품 주위에 루프를 두어 각 객체를 개별적으로 보내야합니까?

답변

2

예,이 접근법은 훌륭하고 정확합니다.

예 여러 개를 보낼 수도 있지만 휴대 전화와 착용 장치간에 공유 또는 동기화와 같은 "보내기"가 아니라는 점을 알고 있어야하며 이후의 다른 시점에서 수정할 수 있습니다.

그래서 Message API가 (빠르고 간단하게) 개체를 보내고 DataItem API는 더 복잡하지만 더 큰 데이터와 사물을 공유하는 데 사용됩니다. 시계와 전화 사이

+0

확인해 주셔서 감사합니다. –

+0

세 개의 다른 사용자 지정 개체가 포함 된 사용자 지정 개체를 보내려면 어떻게됩니까? 모든 단일 개체 필드를 별도로 매핑해야합니까? –

관련 문제