モバイル デバイスでは、Service から同じパスを使用して、次のコードを使用してビットマップ アセットを更新しています。
PutDataMapRequest dataMap = PutDataMapRequest.create("/result/1");
dataMap.getDataMap().putString(FIELD_NAME, name);
if(bitmap != null) {
Asset asset = createAssetFromBitmap(bitmap);
dataMap.getDataMap().putAsset(FIELD_IMAGE, asset);
}
PutDataRequest request = dataMap.asPutDataRequest();
PendingResult<DataApi.DataItemResult> pendingResult = Wearable.DataApi
.putDataItem(mGoogleApiClient, request);
DataApi.DataItemResult result = pendingResult.await(5L, TimeUnit.SECONDS);
ウェアラブルでは、次のような変化を監視しています。
@Override
public void onDataChanged(DataEventBuffer dataEvents) {
for (DataEvent event : dataEvents) {
if (event.getType() == DataEvent.TYPE_CHANGED) {
Log.d(TAG, "DataItem changed: " + event.getDataItem().getUri().toString());
...
dataEvents.release();
初めて実行すると、1 つの dataEvent が得られます。しかし、次に実行すると、同じ Uri を持つ 2 つの dataEvents (古いものと新しいもの) が得られます。等々。
PutDatMapRequest.create() で同じパスを使用すると、DataApi 同期ストア内のデータが更新され、同期されるだけだと思いました。
私は Wearable.DataApi.deleteDataItems() を試しましたが、これはすべて同じ Uri を持つ CHANGED および DELETED イベントの大きなリストを提供するだけです。
時間の経過とともにウェアラブルに大量の dataEvents が発生しないようにするにはどうすればよいですか?