Quantcast
Channel: kenji matsuokaのニッキ
Viewing all articles
Browse latest Browse all 342

Data itemを同期する

$
0
0
ウェアラブル向けアプリを作る 目次
原文
Data itemはシステムが携帯端末とウェアラブル間でデータを同期するときに使うインターフェイスを記載します。DataItemは通常以下のアイテムを含みます。

・Payload - 希望するどんなデータでもセットできるバイト配列です。あなた自身でオブジェクトをシリアライズ/デシリアライズします。payloadのサイズ上限は100kbです。

・Path - フォワードスラッシュで始まる一意の文字列です。(例"/path/to/data")

通常、DataItemは直接実装せずに、

1.PutDataRequestオブジェクトを作りアイテムの一意なIDを示すString pathを指定する。
2.setData()を呼んでpayloadをセットする。
3.DataApi.putDataItem()を呼んでデータアイテムを作るようにシステムにリクエストする。
4.Data itemがリクエストされたら、システムはDataItemインターフェイスを実装したオブジェクトを返します。

setData()を使う生のバイトデータの代わりにuse a data mapを使うことをおすすめします。これによりBundleの使いやすいインターフェイスでData Itemが現れます。

Data Mapを使ったデータの同期

DataMapが使用できるときは、Android Bundleのフォーム内でData itemを使えます。それによりオブジェクトはシリアライズ、デシリアライズされて、Key -valueのペアでデータを操作できます。

data mapを使うには
1.PutDataMapRequestのオブジェクトを作りData itemのパスをセットする。
メモ:pathの文字列はData itemを一意に定めるIDで、これにより接続の両側からデータにアクセスできるようになります。パスは必ずフォワードスラッシュから始まる必要があります。もし、アプリ内で階層的なデータを使うなら、データの構造と一致したpathを作る必要があります。
2.値をセットできるdata mapを取得するためにPutDataMapRequest.getDataMap()を呼びます。
3.putString()などのput...()メソッドを使用してdata mapに好きな値をセットします。
4.PutDataRequestオブジェクトを取得するためにPutDataMapRequest.asPutDataRequest()を呼びます。
5.DataApi.putDataItem()を呼びシステムにData item作成をリクエストします。
メモ:携帯端末とウェアラブルデバイスが切断されていたら、データはバッファリングされ、再接続した時に同期されます。
下記はdata mapを作りデータをセットする例です。

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

Data itemイベントをリッスンする

もし、データレイヤーコネクションの片方でData itemが変更されたら、もう片方で変更の通知を受け取りたいと思うでしょう。Data itemイベントのリスナーを実装することでそれが可能になります。例えば以下はデータが変更された時にアクションを発行する典型的なコールバックの例です。

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

以上はほんのさわりです。より詳細が必要な場合、Listening for Data Layer EventsでServiceやActivityで完全なリスナーを実装する方法を学んでください。


Except as noted, this content is licensed under Creative Commons Attribution 2.5. For details and restrictions, see the Content License.

Viewing all articles
Browse latest Browse all 342

Trending Articles