diff --git a/iFish7/src/main/java/com/ifish/activity/newbind/AirKissUtil.java b/iFish7/src/main/java/com/ifish/activity/newbind/AirKissUtil.java index 85c26d6dd..21b5f5b12 100644 --- a/iFish7/src/main/java/com/ifish/activity/newbind/AirKissUtil.java +++ b/iFish7/src/main/java/com/ifish/activity/newbind/AirKissUtil.java @@ -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() { @Override public void call(Subscriber 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(); }