데이터 아이템 동기화


DataItem은 시스템이 휴대용 장치와 웨어러블간의 데이터 동기화를 위해 사용하는 데이터 인터페이스를 정의한다. 일반적으로 DataItem은 다음과 같은 목록으로 구성된다:

  • Payload - 하나의 바이트 배열로서, 자신의 객체의 직렬화 및 역직렬화를 허용하고 당신이 원하는대로 데이터를 설정할 수 있다. 페이로드의 크기는 100KB로 제한된다.
  • Path - 반드시 슬래쉬가 앞에 오는것으로 시작하는 고유한 문자열이다 (예를들어, "/path/to/data")

보통 당신은 DataItem를 직접 구현해서는 안된다. 대신:

  1. 고유한 항목을 식별하기 위한 문자열 경로를 지정할 PutDataRequest객체를 생성하라.
  2. 페이로드의 설정을 위해 setData()를 호출하라.
  3. 데이터 아이템을 생성하기 위해 시스템에 요청하는 DataApi.putDataItem()를 호출하라.
  4. 데이터 아이템을 요청할 때, 시스템은 DataItem 인터페이스를 구현한 적절한 객체를 반환한다.

그러나, setData()를 이용한 원시 바이트의 작업 대신 사용하기 쉬운 Bundle-같은 인터페이스의 데이터 아이템을 노출하는 데이터 맵의 사용을 추천한다.

데이터 맵의 데이터 동기화


가능하면 Android Bundle의 형태의 데이터 아이템들로 작업을 가능하게 해주는 DataMap 클래스를 사용하라. 그러면 객체의 직렬화 및 역직렬화가 수행되고, 당신은 키-값 쌍으로 이루어진 데이터를 다룰 수 있다.

데이터 맵을 사용하기 위해:

  1. 데이터 아이템의 경로를 설정하는 PutDataMapRequest 객체를 생성하라.

    메모: 경로 문자열은 연결 양쪽으로부터 접근을 허용한 데이터 아이템에 대한 고유한 식별자이다. 경로는 반드시 슬래쉬로 시작해야한다. 만약 당신의 앱에서 계층적 데이터를 사용중이라면, 데이터의 구조와 일치하는 경로 스키마를 만들어야한다.

  2. 당신이 값들을 설정할 수 있는 데이터 맵을 얻기 위한 PutDataMapRequest.getDataMap()를 호출하라.
  3. putString()과 같은 put...() 메소드들을 사용하여 데이터 맵에 대해 원하는 값을 설정하라.
  4. PutDataRequest 객체를 얻기 위해 PutDataMapRequest.asPutDataRequest()를 호출하라.
  5. 데이터 아이템을 생성하기 위해 시스템에 요청하는 DataApi.putDataItem()를 호출하라.

    메모: 만약 핸드셋과 웨어러블 장치가 연결이 끊겼다면, 데이터는 버퍼링 및 연결이 다시 설정될 때 동기화 된다.

다음 예는 데이터 맵 생성, 데이터 설정, 그리고 그것을 생성하는 방법을 보여준다:

PutDataMapRequest dataMap = PutDataMapRequest.create("/count");
dataMap
.getDataMap().putInt(COUNT_KEY, count++);
PutDataRequest request = dataMap.asPutDataRequest();
PendingResult<DataApi.DataItemResult> pendingResult = Wearable.DataApi
       
.putDataItem(mGoogleApiClient, request);

데이터 아이템 이벤트들의 수신(Listen)


만약 데이터 계층 연결의 한쪽이 데이터 아이템을 변경할 경우, 당신은 아마도 연결의 다른쪽에서 어떠한 변화를 통지 받기를 원할지도 모른다. 당신은 데이터 아이템 이벤트들에 대한 리스너를 구현함으로써 이 작업을 수행할 수 있다.

예를들어, 데이터 변경될 때 특정 작업을 수행하기 위해 전형적인 콜백과 같은 것을 보여주고 있다.

@Override
public void onDataChanged(DataEventBuffer dataEvents) {
   
for (DataEvent event : dataEvents) {
       
if (event.getType() == DataEvent.TYPE_DELETED) {
           
Log.d(TAG, "DataItem deleted: " + event.getDataItem().getUri());
       
} else if (event.getType() == DataEvent.TYPE_CHANGED) {
             
Log.d(TAG, "DataItem changed: " + event.getDataItem().getUri());
       
}
   
}
}

이것은 단지 더 많은 구현 세부사항을 필요로 하는 정보일 뿐이다. 데이터 계층 이벤트들의 수신에서 전체 리스너 서비스나 액티비티의 구현 방법에 대해 배워본다.

'Android - Building Apps for Wearables > Sending and Syncing Data' 카테고리의 다른 글

Handling Data Layer Events  (0) 2014.09.10
Sending and Receiving Messages  (0) 2014.09.10
Transferring Assets  (0) 2014.09.10
Accessing the Wearable Data Layer  (0) 2014.09.10
Sending and Syncing Data  (0) 2014.09.10
Posted by 레미파
,