-
Notifications
You must be signed in to change notification settings - Fork 1
Receive_zh
WearTools 也提供了各式各样的监听器,你可以在任何地方注册它们。回调函数将运行在与监听器实例化的同一线程,因此,你可以方便地在回调中更新UI.
警告!! 不论何种监听器,如果要在 Activity 中实例化,请务必特别处理以免造成内存泄漏。详情请参见内存泄漏章节
实例化并注册 WTMessageListener 即可实现对 Message 的监听。 下面是一个简单的 Demo:
WTMessageListener messageListener = new WTMessageListener() {
@Override
public void onMessageReceived(String nodeId, String path, byte[] data, byte[] bothwayId) {
Log.i(TAG, "Receive msg: " + new String(data));
}
};
WTRegister.addMessageListener(context, messageListener); //注册
//WTRegister.removeMessageListener(context, messageListener); //移除实例化并注册 WTMessageListener 即可实现对 Message 的监听。 下面是一个简单的 Demo:
WTDataListener dataListener = new WTDataListener() {
@Override
public void onDataChanged(String path, DataMap dataMap) {
//此回调对应 WTSender.sendData()
Log.i(TAG, "Receive data: " + dataMap.getString("test"));
}
@Override
public void onDataDeleted(String path) {
//此回调对应 WTSender.deleteData()
Log.i(TAG, "Data deleted: " + path);
}
};
WTRegister.addDataListener(context, dataListener); //注册
//WTRegister.removeDataListener(context, dataListener); //移除上面提到,可以利用 Asset 传输较大的文件。 WearTools 提供了 AssetHelper.get() 来方便地取出数据。 下面是一个 Demo 展示如何取出上文发送的图片并显示:
@Override
public void onDataChanged(String path, DataMap dataMap) {
super.onDataChanged(path, dataMap);
Log.i(TAG, "Receive image");
Asset asset = dataMap.getAsset("image");
AssetHelper.get(context, asset, new AssetHelper.AssetCallback() {
@Override
public void onResult(InputStream ins) {
imageView.setImageBitmap(BitmapFactory.decodeStream(ins));
}
});
}有时我们仅仅需要默默地接收数据并处理,而不需要UI交互。此时便适用于使用 Service 来监听。
首先请创建一个类,并继承自 WTListenerService,此 Servie 的生命周期将由系统自动管理,你不需要手动启动或者停止服务。这些定义好的抽象方法与上述监听器类似,将在收到数据的时候被自动调用。 下面是一个简单的 Service Demo:
public class ListenerService extends WTListenerService {
@Override
public void onMessageReceived(String nodeId, String path, byte[] data, byte[] bothwayId) {
}
@Override
public void onDataChanged(String path, DataMap dataMap) {
}
@Override
public void onDataDeleted(String path) {
}
}之后记得在 manifest 里注册Service. 值得注意的是,必须指定 <intent-filter> ,里面必须指定 action 与 data,否则服务将不会被启动,当中的函数也不会被执行。 有关 <intent-filter> 的详细资料,请参见谷歌文档。
注意:所有的 com.google.android.gms.wearable 前缀需要替换为 com.mobvoi.android.wearable.
下面是一个注册了上述几个发送监听的 Demo:
<service android:name="cc.chenhe.lib.weartools.demo.ListenerService">
<intent-filter>
<action android:name="com.mobvoi.android.wearable.MESSAGE_RECEIVED" />
<action android:name="com.mobvoi.android.wearable.DATA_CHANGED" />
<data
android:host="*"
android:path="/image"
android:scheme="wear" />
<data
android:host="*"
android:path="/data/test"
android:scheme="wear" />
<data
android:host="*"
android:path="/msg/test"
android:scheme="wear" />
</intent-filter>
</service>注意: 曾经的 BIND_LISTENER action 已经不再支持,注册 BIND_LISTENER 不会收到任何回调。