Syncing Data Items
Android - Building Apps for Wearables/Sending and Syncing Data 2014. 9. 10. 14:59데이터 아이템 동기화
DataItem
은 시스템이 휴대용 장치와 웨어러블간의 데이터 동기화를 위해 사용하는 데이터 인터페이스를 정의한다. 일반적으로 DataItem
은 다음과 같은 목록으로 구성된다:
- Payload - 하나의 바이트 배열로서, 자신의 객체의 직렬화 및 역직렬화를 허용하고 당신이 원하는대로 데이터를 설정할 수 있다. 페이로드의 크기는 100KB로 제한된다.
- Path - 반드시 슬래쉬가 앞에 오는것으로 시작하는 고유한 문자열이다 (예를들어,
"/path/to/data"
)
보통 당신은 DataItem
를 직접 구현해서는 안된다. 대신:
고유한 항목을 식별하기 위한 문자열 경로를 지정할 PutDataRequest
객체를 생성하라.- 페이로드의 설정을 위해 setData()를 호출하라.
- 데이터 아이템을 생성하기 위해 시스템에 요청하는
DataApi.putDataItem()
를 호출하라. - 데이터 아이템을 요청할 때, 시스템은
DataItem
인터페이스를 구현한 적절한 객체를 반환한다.
그러나, setData()를 이용한 원시 바이트의 작업 대신 사용하기 쉬운 Bundle-같은 인터페이스의 데이터 아이템을 노출하는 데이터 맵의 사용을 추천한다.
데이터 맵의 데이터 동기화
가능하면 Android Bundle의 형태의 데이터 아이템들로 작업을 가능하게 해주는 DataMap
클래스를 사용하라. 그러면 객체의 직렬화 및 역직렬화가 수행되고, 당신은 키-값 쌍으로 이루어진 데이터를 다룰 수 있다.
데이터 맵을 사용하기 위해:
- 데이터 아이템의 경로를 설정하는
PutDataMapRequest
객체를 생성하라.메모: 경로 문자열은 연결 양쪽으로부터 접근을 허용한 데이터 아이템에 대한 고유한 식별자이다. 경로는 반드시 슬래쉬로 시작해야한다. 만약 당신의 앱에서 계층적 데이터를 사용중이라면, 데이터의 구조와 일치하는 경로 스키마를 만들어야한다.
- 당신이 값들을 설정할 수 있는 데이터 맵을 얻기 위한
PutDataMapRequest.getDataMap()
를 호출하라. putString()
과 같은put...()
메소드들을 사용하여 데이터 맵에 대해 원하는 값을 설정하라.PutDataRequest
객체를 얻기 위해PutDataMapRequest.asPutDataRequest()
를 호출하라.- 데이터 아이템을 생성하기 위해 시스템에 요청하는
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 |