基于Zigbee网络的获取数据需要建立传感器数据接收监听器的进程,时刻监听是否有新数据上传,核心代码如下:
//传感器数据接收监听器
String sdat = new String(dat); //要发送的数据
String s = "[" + MAC + "]<<" + sdat;//封装数据
mSensorData.onSensorData(MAC, sdat);//调用类的方法获取数据
if (mCurrentActivity != null) {
//建立线程锁
synchronized (mCurrentActivity) {
String[] sMAC = mCurrentActivity.getMACAddress();//获取MAC地址
for (String x : sMAC) {//循环整个MAC地址
if (x.equalsIgnoreCase(MAC)) {//判断MAC地址是否符合
String sdata = MAC + "=" + new String(sdat);//封装数据格式
String MACs = mUserConfig.getString(SmartHomeApplication.KEY_Monitor); //获取MAC地址
String mMACs[] = new String[] { "" };//定义MAC集合数组
if (MACs.length() > 0) {//解析信息
String[] b = MACs.split("=");//以=为分割标志,分割字符串
mMACs[0] = b[1];//第一个为MAC地址
}
if (MAC.equalsIgnoreCase(mMACs[0])) {//判断MAC的地址是否符合
mCurrentActivity.postSensorData(dat);//发送获取数据指令
} else {
mCurrentActivity.postSensorData(sdata).getBytes());//获取数据
}
}
}
}
}
基于Zigbee网络的发送数据时,该系统需要MqttMessage类中的方法,需要使用MQTT协议与Zigbee网络中的传感器进行通信。具体代码如下:
//Android程序通过wsn连接Zigbee网络
String topic = "/com/zonesion/wsn/control/" + mApplicationID + "/"+ addr;
//初始化MqttMessage
MqttMessage msg = new MqttMessage(dat);
//发送0指令
msg.setQos(0);
if (mLocal.isConnected()) {//判断本地是否是连接的
//本地发布
mLocal.publish(topic, msg);
} else if (mGlobal.isConnected()) {//判断全局是否是连接的
//全局发布
mGlobal.publish(topic, msg);
} else {
Log.d(TAG, "No mqtt server connected!");//输出提示信息
}