同步到可穿戴设备时的数据重复

时间:2018-03-08 01:36:31

标签: android wear-os android-wear-data-api

我尝试将手机(API 24)中的数据同步到Android Wear手表(API 25)。使用this example code,我能够成功发送数据项,但是当我在循环中运行代码时,数据项在手表上重复。如果我在循环中设置断点并逐步执行它,它就不会重复。

作为测试,我创建了一个执行同步代码的按钮,如果我快速按下按钮,则项目会重复,但如果我在每次按下按钮之间暂停,则不会重复。

我尝试使用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) {

        }
    });

更新:

对于测试,我运行了此代码。结果是只有第二个数据项被传输到手表。如果我为第二个测试2注释putDataItem,则显示第一个测试。在它们之间放置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提交错误请求,希望它会在五年后解决。

错误提交here,如果您遇到此问题,请提示。

0 个答案:

没有答案