Дублирование данных при синхронизации с носимым устройством

Я пытаюсь синхронизировать данные со своего телефона (API 24) с часами Android Wear (API 25). Используя этот пример кода, я могу отправлять элементы данных успешно, однако, когда я запускаю код в цикле, элементы данных дублируются на часах. Он не дублируется, если я устанавливаю точку останова в цикле и прохожу через нее.

В качестве теста я создал кнопку, которая выполняет код синхронизации, и если я нажимаю кнопку быстро, элементы дублируются, но не в том случае, если я делаю паузу между каждым нажатием кнопки.

Я пробовал использовать SystemClock.sleep(), чтобы приостановить цикл до 5 секунд. Это ненадежно, потому что одни элементы дублируются, а другие нет.

Этот код является обновлением Wearable.DataApi, который устарел, но старый код работал нормально без дублирования.

    PutDataMapRequest dataMap = PutDataMapRequest.create("/import");
    dataMap.getDataMap().putString("title", "Title 1");
    PutDataRequest request = dataMap.asPutDataRequest();

    final Task<DataItem> task = Wearable.getDataClient(this).putDataItem(request);

    task.addOnSuccessListener(new OnSuccessListener<DataItem>() {
        @Override
        public void onSuccess(DataItem dataItem) {

        }
    });

    task.addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {

        }
    });

ОБНОВИТЬ:

Для теста я запустил этот код. В результате в часы передается только второй элемент данных. Если я закомментирую putDataItem для второго теста 2, то отобразится первый тест. Помещение SystemClock.sleep между ними по-прежнему приводит к передаче только второго элемента данных.

    final PutDataMapRequest dataMap = PutDataMapRequest.create("/import");
    dataMap.getDataMap().putString("title", "title1");
    dataMap.getDataMap().putString("rss_url", "http://wwww.test1.com");
    dataMap.getDataMap().putLong("time", new Date().getTime());
    final PutDataRequest request = dataMap.asPutDataRequest();

    Wearable.getDataClient(this).putDataItem(request);

    final PutDataMapRequest dataMap2 = PutDataMapRequest.create("/import");
    dataMap2.getDataMap().putString("title", "title2");
    dataMap2.getDataMap().putString("rss_url", "http://wwww.test2.com");
    dataMap2.getDataMap().putLong("time", new Date().getTime());
    final PutDataRequest request2 = dataMap2.asPutDataRequest();

    Wearable.getDataClient(this).putDataItem(request2);

ОБНОВЛЕНИЕ 2:

Что-то серьезно не так с последовательной отправкой данных с классом com.google.android.gms.wearable.Wearable. Любая попытка отправить данные автоматически, более одного раза, вызывает дублирование на часах.

Собираюсь отправить запрос об ошибке в Google, и, надеюсь, он будет исправлен через пять лет.

Сообщение об ошибке отправлено здесь. Если вы столкнулись с этим, отметьте его.


person Kris B    schedule 08.03.2018    source источник
comment
возможный дубликат stackoverflow.com/questions/34702376/   -  person noogui    schedule 08.03.2018
comment
Нет, задержки нет, это мгновенно. Я также пробовал установить свойство urgent, но результаты все те же.   -  person Kris B    schedule 08.03.2018