0

モバイル デバイスでは、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 が発生しないようにするにはどうすればよいですか?

4

2 に答える 2

0

日付アイテムは、アイテムを最初に作成したホストを含​​む完全な uri によって一意です。同じパスを持つアイテムが複数ある場合がありますが、それぞれに固有のホストがあります。

そのため、1 つのホストでアイテムを作成し、別のホストで fetch/onDataChanged を実行する場合は、新しい DataItem.fromPath を作成するのではなく、DataItem を変更してアイテムに配置する必要があります。

于 2014-08-17T20:15:23.490 に答える