初步增加airkiss配网
This commit is contained in:
parent
e7479a8d7e
commit
6788ff18d1
|
|
@ -17,6 +17,7 @@ import java.net.DatagramPacket;
|
|||
import java.net.DatagramSocket;
|
||||
import java.net.InetAddress;
|
||||
import java.net.SocketException;
|
||||
import java.util.Arrays;
|
||||
|
||||
import rx.Observable;
|
||||
import rx.Subscription;
|
||||
|
|
@ -35,6 +36,7 @@ public class AirKissUtil {
|
|||
|
||||
private Subscription sendSubscribe;
|
||||
private Subscription receiveSubscribe;
|
||||
private String device_mac;
|
||||
|
||||
public void connectDeviceByAirKiss(AppCompatActivity activity, String ssid, String password) {
|
||||
if (sendSubscribe != null && sendSubscribe.isUnsubscribed()) {
|
||||
|
|
@ -48,27 +50,26 @@ public class AirKissUtil {
|
|||
sendSubscribe = Observable.create(new Observable.OnSubscribe<String>() {
|
||||
@Override
|
||||
public void call(Subscriber<? super String> subscriber) {
|
||||
byte DUMMY_DATA[] = new byte[1500];
|
||||
DatagramSocket sendSocket = null;
|
||||
try {
|
||||
sendSocket = new DatagramSocket();
|
||||
byte[] sendBuffer = new byte[1500];
|
||||
try (DatagramSocket sendSocket = new DatagramSocket()) {
|
||||
// 创建一个新的DatagramSocket对象,此时系统会随机分配一个可用的UDP端口号。
|
||||
// 设置该DatagramSocket为广播模式,允许向广播地址发送数据包。
|
||||
sendSocket.setBroadcast(true);
|
||||
int encoded_data[] = airKissEncoder.getEncodedData();
|
||||
for (int i = 0; i < encoded_data.length; ++i) {
|
||||
DatagramPacket pkg = new DatagramPacket(DUMMY_DATA,
|
||||
encoded_data[i],
|
||||
InetAddress.getByName("192.168.4.1"),
|
||||
333);
|
||||
sendSocket.send(pkg);
|
||||
Thread.sleep(4);
|
||||
// 从AirKissEncoder对象中获取编码后的数据数组。
|
||||
int[] encoded_data = airKissEncoder.getEncodedData();
|
||||
for (int i = 0; i < 5; i++) {
|
||||
for (int encoded_datum : encoded_data) {
|
||||
DatagramPacket pkg = new DatagramPacket(sendBuffer, encoded_datum, InetAddress.getByName("192.168.4.1"), 333);
|
||||
sendSocket.send(pkg);
|
||||
Thread.sleep(4);
|
||||
}
|
||||
LogUtils.d("LHD 从AirKissEncoder对象中获取编码后的数据数组 encoded_data = "+ Arrays.toString(encoded_data));
|
||||
Thread.sleep(1000);
|
||||
}
|
||||
subscriber.onCompleted();
|
||||
} catch (Exception e) {
|
||||
subscriber.onError(e);
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
sendSocket.close();
|
||||
sendSocket.disconnect();
|
||||
}
|
||||
}
|
||||
})
|
||||
|
|
@ -89,22 +90,11 @@ public class AirKissUtil {
|
|||
@Override
|
||||
public void onNext(String string) {
|
||||
LogUtils.d("LHD send onNext =" + string);
|
||||
ProgressDialog mDialog = new ProgressDialog(activity);
|
||||
mDialog.setTitle("配网");
|
||||
mDialog.setMessage("发送配网信息...");
|
||||
mDialog.setCancelable(false);
|
||||
mDialog.show();
|
||||
new Handler().postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
//发送配网ssid pwd,因为字节发送需要时间比较久,此处只是设置比较短的提示,但实际上后台线程还在发送中。
|
||||
mDialog.dismiss();
|
||||
receiveUDPPackage(activity);
|
||||
}
|
||||
}, 5000);
|
||||
}
|
||||
});
|
||||
|
||||
receiveUDPPackage(activity);
|
||||
|
||||
}
|
||||
|
||||
public void receiveUDPPackage(AppCompatActivity activity) {
|
||||
|
|
@ -120,14 +110,14 @@ public class AirKissUtil {
|
|||
udpServerSocket.setSoTimeout(1000 * 60);
|
||||
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
|
||||
while (true) {
|
||||
LogUtils.d("LHD status running");
|
||||
LogUtils.d("LHD receiveUDP status running");
|
||||
udpServerSocket.receive(packet);
|
||||
buffer = packet.getData();
|
||||
String hexString = Str_Hex.byte2hex(buffer);
|
||||
//对收到的UDP包进行解码
|
||||
//各个设备返回的UDP包格式不一样 将解码的UDP包通过RxJava发送到主线程 进行UI处理
|
||||
if (!TextUtils.isEmpty(hexString)) {
|
||||
LogUtils.d("LHD received : " + hexString);
|
||||
LogUtils.d("LHD receiveUDP : " + hexString);
|
||||
subscriber.onNext(hexString);
|
||||
break;
|
||||
}
|
||||
|
|
@ -144,8 +134,9 @@ public class AirKissUtil {
|
|||
e.printStackTrace();
|
||||
} finally {
|
||||
LogUtils.d("LHD received finally: ");
|
||||
udpServerSocket.close();
|
||||
udpServerSocket.disconnect();
|
||||
if (udpServerSocket != null) {
|
||||
udpServerSocket.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
}).subscribeOn(Schedulers.newThread())
|
||||
|
|
@ -167,6 +158,7 @@ public class AirKissUtil {
|
|||
@Override
|
||||
public void onError(Throwable e) {
|
||||
ToastUtil.show(activity, "连接失败: " + e.getMessage());
|
||||
LogUtils.d("LHD received 连接失败: "+e.getMessage());
|
||||
mDialog.dismiss();
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue