Skip to content
This repository was archived by the owner on Aug 16, 2021. It is now read-only.

Send_zh

晨鹤 edited this page Dec 19, 2017 · 1 revision

在使用此api之前,建议先阅读谷歌文档了解 Message 和 DataItem 的区别以及适用场景。

发送 Message

你可以在任何地方任何线程调用 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 ,这不代表对端设备一定可以收到数据。

发送 DataItem (DataMap)

由于 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)

因为 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 是不限制大小的,但是受限于蓝牙带宽,发送大文件将耗费很长的时间,在这过程中还可能影响其他数据的传输,因此请慎重传输超大文件。

Clone this wiki locally