几个月前我实现了兼容1.x的表盘(2.x即将推出)。该应用程序已经在真实设备上与调试版本进行了全面测试,再加上模拟器,以及第一代moto 360。一切都像魅力一样。两个设备都来回通信,应用程序已准备好部署。我使用发布版本进行了最后一轮测试,安装在真实设备上:一切都很好,该应用程序已准备好发布!
我在商店推出了一个alpha版本,供少数alpha测试人员使用。这里出现了问题:手机不再与手表正常交互了。更具体地说:数据是从手机发送的,但在这种特定情况下似乎没有调用手表侧的onDataChanged
回调。我真的不明白,因为当我在我的测试设备上手动安装时,发布版本完全正常工作。
发送数据(电话方):
public static void putConfigDataItem(GoogleApiClient googleApiClient, final DataMap newConfig) {
PutDataMapRequest putDataMapRequest = PutDataMapRequest.create(DataLayerKeys.PATH_WITH_FEATURE);
putDataMapRequest.setUrgent();
DataMap configToPut = putDataMapRequest.getDataMap();
configToPut.putAll(newConfig);
Wearable.DataApi.putDataItem(googleApiClient, putDataMapRequest.asPutDataRequest()).setResultCallback(new ResultCallback<DataApi.DataItemResult>() {
@Override
public void onResult(@NonNull DataApi.DataItemResult dataItemResult) {
Timber.d("putDataItem result status: " + dataItemResult.getStatus());
}
});
}
应该在这里接收数据(观看侧),但不能正常工作:
public class HaikuService extends CanvasWatchFaceService {
@Override
public Engine onCreateEngine() {
return new HaikuEngine();
}
private class HaikuEngine extends Engine implements DataApi.DataListener,
GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
private final GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(HaikuService.this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(Wearable.API)
.build();
//...
@Override // DataApi.DataListener
public void onDataChanged(DataEventBuffer dataEvents) {
//... not called
}
//...
}
}
注意:磨损和移动模块具有相同的applicationId。
Wearable.DataApi.putDataItem
从手机到手表不起作用,但Wearable.MessageApi.sendMessage
实际上正在工作。我正在使用它在手机和手表之间来回通信,以便在第一次启动时授予位置许可,并且一切都按预期工作。
我一直在互联网上找不到任何东西。也许我错过了一些非常明显的东西..我在这个问题上花了好几天没办法找出答案。我将永远感谢能够帮助我或提供任何提示的任何人。