我尝试将手机(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,如果您遇到此问题,请提示。