На мобильном устройстве из службы я использую тот же путь для обновления растрового ресурса, используя следующий код:
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();
Теперь при первом запуске я получаю одно событие dataEvent. Но в следующий раз, когда я его запускаю, я получаю 2 события данных с одним и тем же Uri, старым и новым. И так далее.
Я думал, что использование того же пути в PutDatMapRequest.create() просто обновит данные в хранилище синхронизации DataApi и синхронизирует их.
Я пробовал Wearable.DataApi.deleteDataItems(), но это просто дает мне большой список событий CHANGED и DELETED, все с одним и тем же Uri.
Как мне избежать множества событий данных на моем носимом устройстве с течением времени?