-
Notifications
You must be signed in to change notification settings - Fork 1
Send_zh
在使用此api之前,建议先阅读谷歌文档了解 Message 和 DataItem 的区别以及适用场景。
你可以在任何地方任何线程调用 WTSender.sendMessage() 函数来发送 Message. 你可以选择传入一个 SendMsgCallback 来取得发送的结果。 下面是一个简单的发送 Demo:
String path = "/msg/test";
String content = "This is a Message";
WTSender.sendMessage(context, path, content, new WTSender.SendMsgCallback() {
@Override
public void onSuccess() {
Log.i(TAG, "Send msg OK");
}
@Override
public void onFailed(int resultCode) {
Log.e(TAG, "Send msg failed");
}
});注意: 回调中的成功指的是成功将请求发送给 Google Play Service 或 Mobvoi API ,这不代表对端设备一定可以收到数据。
由于 DataMap 比 DataItem 更加易用,WearTools 将只支持发送结构化的 DataMap,其完全可以取代 DataItem.
同样的,你可以在任何地方任何线程调用 WTSender.sendData() 函数来发送 DataMap. 不过在此之前应先调用
WTSender.getPutDataMapRequest() 来获得 PutDataMapRequest ,并向其添加数据。 下面是一个简单的发送Demo:
String path = "/data/test";
String conetnt = "This is a dataMap."
PutDataMapRequest putDataMapRequest = WTSender.getPutDataMapRequest(path);
putDataMapRequest.getDataMap().putString("test",conetnt);
//要求系统立即同步此DataMap,否则系统会在适当的时候同步以便节约资源消耗。
putDataMapRequest.setUrgent();
//发送
WTSender.sendData(context, putDataMapRequest, new WTSender.SendDataCallback() {
@Override
public void onSuccess(Uri uri) {
Log.i(TAG, "Send data OK");
}
@Override
public void onFailed(int resultCode) {
Log.e(TAG, "Send data failed");
}
});注意: 与发送 Message 一样,回调中的成功指的是成功将请求发送给 Google Play Service 或 Mobvoi API ,这不代表对端设备一定可以收到数据。
因为 DataItem (DataMap) 设计上是用来在手机与手表间同步数据,因此,也提供了删除方法。
你可以在任何地方任何线程调用 WTSender.deleteData() 函数来删除 DataMap. 不过这要求你在发送 DataMap 时存下了它的 Uri ,可以使用
putDataMapRequest.getUri() 获得。 下面是一个简单的删除Demo:
Uri mDataUri;
WTSender.deleteData(context, mDataUri, new WTSender.DeleteDataCallback() {
@Override
public void onSuccess() {
Log.i(TAG, "Del data OK");
}
@Override
public void onFailed(int resultCode) {
Log.e(TAG, "Del data failed");
}
});注意: 删除与发送 DataItem 是两个独立的请求,不能够相互抵消。
DataMap 限制大小为100KB,如果要传输一个图片等大数据,则需要通过 Asset ,Asset 又需要与 DataMap 绑定。 下面是一个发送图片的Demo:
try {
//从assets中读取图片
InputStream in = getResources().getAssets().open("image1.webp");
int len = in.available();
byte[] buffer = new byte[len];
in.read(buffer);
in.close();
Asset asset = Asset.createFromBytes(buffer); //创建Asset
PutDataMapRequest putDataMapRequest = WTSender.getPutDataMapRequest("/image");
putDataMapRequest.setUrgent(); //要求系统立即传输
putDataMapRequest.getDataMap().putAsset("image", asset); //将Asset绑定到DataMap
Log.i(TAG, "Sending image data...");
WTSender.sendData(context, putDataMapRequest, new WTSender.SendDataCallback() {
@Override
public void onSuccess(Uri uri) {
Log.i(TAG, "Send image OK");
}
@Override
public void onFailed(int resultCode) {
Log.e(TAG, "Send image failed");
}
});
} catch (IOException e) {
e.printStackTrace();
}注意: 虽然理论上 Asset 是不限制大小的,但是受限于蓝牙带宽,发送大文件将耗费很长的时间,在这过程中还可能影响其他数据的传输,因此请慎重传输超大文件。