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 74d1b7663..1492996de 100644 --- a/iFish7/src/main/java/com/ifish/activity/newbind/AirKissUtil.java +++ b/iFish7/src/main/java/com/ifish/activity/newbind/AirKissUtil.java @@ -1,15 +1,46 @@ package com.ifish.activity.newbind; import android.app.ProgressDialog; +import android.content.Intent; +import android.os.CountDownTimer; import android.os.Handler; import android.text.TextUtils; import android.util.Log; import androidx.appcompat.app.AppCompatActivity; +import com.ifish.activity.BlackListActivity; +import com.ifish.activity.LoadingActivity; +import com.ifish.activity.MainEightControlActivity; +import com.ifish.activity.MainFiveBDControlActivity; +import com.ifish.activity.MainFiveControlActivity; +import com.ifish.activity.MainFourControlActivity; +import com.ifish.activity.MainFour_2B_ControlActivity; +import com.ifish.activity.MainFour_3F_ControlActivity; +import com.ifish.activity.MainHot_3A_ControlActivity; +import com.ifish.activity.MainSeven_2F_ControlActivity; +import com.ifish.activity.MainSixControlActivity; +import com.ifish.activity.MainSix_2A_ControlActivity; +import com.ifish.activity.MainSix_4F_ControlActivity; +import com.ifish.activity.MainThree1CControlActivity; +import com.ifish.activity.MainThreeControlActivity; +import com.ifish.activity.MainTwoControlActivity; +import com.ifish.activity.MainZeroControlActivity; +import com.ifish.activity.NewBindDeviceChoiceActivity; import com.ifish.airkiss.AirKissEncoder; import com.ifish.airkiss.Str_Hex; +import com.ifish.basebean.BaseBean; +import com.ifish.basebean.Device; +import com.ifish.baseclass.BaseGradeActivity; +import com.ifish.utils.AnimationUtil; +import com.ifish.utils.Commons; +import com.ifish.utils.HttpListener; +import com.ifish.utils.HttpManager; +import com.ifish.utils.L; +import com.ifish.utils.SPUtil; import com.ifish.utils.ToastUtil; +import com.ifish.utils.WifiUtil; +import com.ifish.view.PetPopupChoice; import com.lidroid.xutils.util.LogUtils; import java.io.IOException; @@ -18,6 +49,7 @@ import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import java.util.Arrays; +import java.util.List; import rx.Observable; import rx.Subscription; @@ -37,6 +69,19 @@ public class AirKissUtil { private Subscription sendSubscribe; private Subscription receiveSubscribe; private String device_mac; + private WifiUtil wifiUtil; + private Device deviceObj; + private HttpManager hm = HttpManager.getInstance(); + private boolean deviceIsNull = false;///当服务器返回的设备控制器数和定时器数为null的时候 改变标记的值 不跳转进入主界面 + private int deviceIsNullNum = 0;//循环请求次数 + private CountDownTimer deviceIsNullTimer; + private SPUtil sp; + private AppCompatActivity curActivity; + public void init(AppCompatActivity activity){ + wifiUtil = new WifiUtil(activity); + sp = SPUtil.getInstance(activity); + curActivity = activity; + } public void connectDeviceByAirKiss(AppCompatActivity activity, String ssid, String password) { if (sendSubscribe != null && sendSubscribe.isUnsubscribed()) { @@ -59,9 +104,9 @@ public class AirKissUtil { sendSocket.setBroadcast(true); // 从AirKissEncoder对象中获取编码后的数据数组。 int[] encoded_data = airKissEncoder.getEncodedData(); - for (int i = 0; i < 5; i++) { + for (int i = 0; i < 2; i++) { for (int encoded_datum : encoded_data) { - DatagramPacket pkg = new DatagramPacket(sendBuffer, encoded_datum, InetAddress.getByName("192.168.4.1"), 333); + DatagramPacket pkg = new DatagramPacket(sendBuffer, encoded_datum, InetAddress.getByName("255.255.255.255"), 10000); sendSocket.send(pkg); Thread.sleep(4); } @@ -82,6 +127,35 @@ public class AirKissUtil { @Override public void onCompleted() { LogUtils.d("LHD onCompleted"); +// device_mac = ""; +// device_mac = wifiUtil.getConnectWifiBssid(); +// hm.queryStoreName(new HttpListener>>() { +// @Override +// public void success(final BaseBean> baseBean) { +// activity.runOnUiThread(new Runnable() { +// @Override +// public void run() { +// new PetPopupChoice(activity, new PetPopupChoice.OnChoiceListener() { +// @Override +// public void onChoice(String s) { +// doPostBindDevice(s); +// } +// }, baseBean.data).showDialog(); +// } +// }); +// } +// +// @Override +// public void error(Exception e, String msg) { +//// resetWifiContentView(); +// ToastUtil.show(activity, msg); +// } +// +// @Override +// public void finish() { +// +// } +// }, Commons.USER.getUserId()); } @Override @@ -109,30 +183,31 @@ public class AirKissUtil { } }); - -// receiveUDPPackage(activity); - } public void receiveUDPPackage(AppCompatActivity activity) { - //接收udp包 receiveSubscribe = Observable.create(new Observable.OnSubscribe() { @Override public void call(Subscriber subscriber) { - byte[] buffer = new byte[15000]; - try (DatagramSocket udpServerSocket = new DatagramSocket(9954)) { + try (DatagramSocket udpServerSocket = new DatagramSocket(10000)) { udpServerSocket.setSoTimeout(1000 * 60); - DatagramPacket packet = new DatagramPacket(buffer, buffer.length); while (true) { - LogUtils.d("LHD receiveUDP status running"); + byte[] buffer = new byte[1024]; + DatagramPacket packet = new DatagramPacket(buffer, buffer.length); udpServerSocket.receive(packet); buffer = packet.getData(); + + Log.e("LHD test9999999990","收到的udp包 1:" + new String(buffer)); String hexString = Str_Hex.byte2hex(buffer); + Log.e("LHD test9999999990","收到的udp包地址:" + packet.getAddress() + "///"+ WifiUtil.intToIp(wifiUtil.getConnectIpAddress())); + Log.e("LHD test9999999990","收到的udp包 2:" + hexString); + + LogUtils.d("LHD airkiss = "+packet.getSocketAddress()+" port = "+packet.getPort()); //对收到的UDP包进行解码 //各个设备返回的UDP包格式不一样 将解码的UDP包通过RxJava发送到主线程 进行UI处理 if (!TextUtils.isEmpty(hexString)) { - LogUtils.d("LHD receiveUDP : " + hexString); + Log.d("LHD received:", hexString); subscriber.onNext(hexString); break; } @@ -178,11 +253,99 @@ public class AirKissUtil { @Override public void onNext(String s) { ToastUtil.show(activity, "收到的UDP包:" + s); + doPostBindDevice(); } }); } + /** + * @param + * @Description: 给设备发送入网指令 + * @author Jacky dada + * @date 2015-9-21 下午3:05:01 + */ + private void doPostBindDevice() { + try { + hm.bindDevice(new HttpListener>() { + private int result; + + @Override + public void success(BaseBean baseBean) { + result = baseBean.result; + if (result == Commons.NetWork.Success) { + deviceObj = baseBean.data; + deviceObj.setMacAddress(device_mac); + /** + //当服务器返回的设备控制器数和定时器数为null的时候 不跳转进入主界面 + */ + if (deviceObj.getControlAmount() == null || deviceObj.getTimerAmount() == null) { + L.i("第一次获取空"); + deviceIsNull = true; + deviceIsNullNum = 0; + startDeviceIsNullTimer();//启动倒计时 + } + } + } + + @Override + public void finish() { + doPostBindDeviceHandler.sendEmptyMessage(result); + } + + @Override + public void error(Exception e, String msg) { + result = Commons.NetWork.ERROR; + } + }, Commons.USER.getUserId(), device_mac); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * @param + * @Description: 给宠物设备发送入网指令 + * @author Jacky dada + * @date 2015-9-21 下午3:05:01 + */ + private void doPostBindPetDevice(String storeName) { + try { + hm.bindPetDevice(new HttpListener>() { + private int result; + + @Override + public void success(BaseBean baseBean) { + result = baseBean.result; + if (result == Commons.NetWork.Success) { + deviceObj = baseBean.data; + deviceObj.setMacAddress(device_mac); + /** + //当服务器返回的设备控制器数和定时器数为null的时候 不跳转进入主界面 + */ + if (deviceObj.getControlAmount() == null || deviceObj.getTimerAmount() == null) { + deviceIsNull = true; + deviceIsNullNum = 0; + startDeviceIsNullTimer();//启动倒计时 + } + } + } + + @Override + public void finish() { + doPostBindDeviceHandler.sendEmptyMessage(result); + } + + @Override + public void error(Exception e, String msg) { + result = Commons.NetWork.ERROR; + } + }, Commons.USER.getUserId(), device_mac, storeName); + } catch (Exception e) { + e.printStackTrace(); + } + } + public void unSubscribe() { if (sendSubscribe != null && sendSubscribe.isUnsubscribed()) { @@ -193,4 +356,348 @@ public class AirKissUtil { } } + + public void startDeviceIsNullTimer() { + if (deviceIsNullTimer == null) { + deviceIsNullTimer = new CountDownTimer(2000, 1000) { + @Override + public void onTick(long arg0) { + } + + @Override + public void onFinish() { + L.i("重新请求"); + //拿到设备id 去服务器查询 看看是否为空 + try { + hm.getSingleDeviceInf(new HttpListener>() { + private int result; + + @Override + public void success(BaseBean baseBean) { + result = baseBean.result; + deviceObj = baseBean.data; + } + + @Override + public void finish() { + deviceIsNullHandler.sendEmptyMessage(result); + } + + @Override + public void error(Exception e, String msg) { + result = Commons.NetWork.ERROR; + } + }, deviceObj.getDeviceId(), Commons.USER.getUserId()); + } catch (Exception e) { + e.printStackTrace(); + } + } + }; + } + deviceIsNullTimer.start(); + } + + Handler deviceIsNullHandler = new Handler() { + + + public void handleMessage(android.os.Message msg) { + L.i("请求结束"); + switch (msg.what) { + case Commons.NetWork.Success: + if (deviceObj.getControlAmount() == null || deviceObj.getTimerAmount() == null) { + deviceIsNullNum = deviceIsNullNum + 1; + if (deviceIsNullNum < 3) { + startDeviceIsNullTimer(); + } else { + resetWifiContentView(); + ToastUtil.show(curActivity, "绑定设备失败 请重试"); + } + return; + } + boolean isSameName = false; + try { + if (Commons.DEVICE != null) { + if (Commons.DEVICE.size() != 0) { + for (int i = 0; i < Commons.DEVICE.size(); i++) { + if (device_mac.equals(Commons.DEVICE.get(i).getMacAddress())) { + sp.putInt(Commons.LoginSPKey.Position, i); + Commons.DevicePosition = i; + isSameName = true; + break; + } + } + } + } + } catch (Exception e) { + } + if (!isSameName) { + Commons.DEVICE.add(deviceObj); + try { + sp.putInt(Commons.LoginSPKey.Position, Commons.DEVICE.size() - 1); + Commons.DevicePosition = Commons.DEVICE.size() - 1; + } catch (Exception e) { + } + } + Commons.IS_EventBus = true; + Commons.HAVE_DEVICE = true;//改变判断是否绑定的变量 + Commons.IS_CAMERA = false; + sp.putBoolean(Commons.LoginSPKey.IS_CAMERA, Commons.IS_CAMERA); + Intent i = new Intent(); + try { + Integer controlAmount = Commons.DEVICE.get(Commons.DevicePosition).getControlAmount(); + Integer timerAmount = Commons.DEVICE.get(Commons.DevicePosition).getTimerAmount(); + String type = Commons.DEVICE.get(Commons.DevicePosition).type; + if (Commons.FishKey.On.equals(Commons.DEVICE.get(Commons.DevicePosition).isBlacklist)) {//黑名单 + i.setClass(curActivity, BlackListActivity.class); + } else { + if (Device.TYPE_1C.equals(type)) { + i.setClass(curActivity, MainThree1CControlActivity.class); + } else if (Device.TYPE_AA.equals(type)) { + i.setClass(curActivity, MainFiveControlActivity.class); + } else if (Device.TYPE_BD.equals(type)) { + i.setClass(curActivity, MainFiveBDControlActivity.class); + } else if (Device.TYPE_2A.equals(type)) { + i.setClass(curActivity, MainSix_2A_ControlActivity.class); + } else if (Device.TYPE_2B.equals(type)) { + i.setClass(curActivity, MainFour_2B_ControlActivity.class); + } else if (Device.TYPE_3A.equals(type)) { + i.setClass(curActivity, MainHot_3A_ControlActivity.class); + } else if (Device.TYPE_2F.equals(type)) { + i.setClass(curActivity, MainSeven_2F_ControlActivity.class); + } else if (Device.TYPE_3F.equals(type)) { + i.setClass(curActivity, MainFour_3F_ControlActivity.class); + } else if (Device.TYPE_4F.equals(type) || Device.TYPE_5F.equals(type)){ + i.setClass(curActivity, MainSix_4F_ControlActivity.class); + } else { + if (controlAmount == null) {//如果控制器返回空 则默认给三控的页面 + i.setClass(curActivity, MainThreeControlActivity.class); + } else { + i.setClass(curActivity, MainThreeControlActivity.class); + switch (controlAmount) { + case 0: { + i.setClass(curActivity, MainZeroControlActivity.class); + break; + } + case 2: { + i.setClass(curActivity, MainTwoControlActivity.class); + break; + } + case 3: { + i.setClass(curActivity, MainThreeControlActivity.class); + break; + } + case 4: { + if (timerAmount == 6) { // 可丽爱 + i.setClass(curActivity, MainFiveControlActivity.class); + } else {//4控 + i.setClass(curActivity, MainFourControlActivity.class); + } + break; + } + case 5: { + if (6 == timerAmount) {//5控六定时器 询多页面 + i.setClass(curActivity, MainSixControlActivity.class); + } + break; + } + case 8: { + i.setClass(curActivity, MainEightControlActivity.class); + break; + } + default: { + i.setClass(curActivity, MainThreeControlActivity.class); + break; + } + } + } + } + + + } + } catch (Exception e) { + i.setClass(curActivity, MainThreeControlActivity.class); + } + i.putExtra(BaseGradeActivity.BINDDEVICE, true);//绑定成功增加经验 + ToastUtil.show(curActivity, "绑定设备成功"); + curActivity.startActivity(i); + AnimationUtil.startAnimation(curActivity); + curActivity.finish(); + L.i("===================绑定设备成功=" + device_mac); + break; + case Commons.NetWork.ERROR: + resetWifiContentView(); + ToastUtil.show(curActivity, Commons.Text.ERROR); + break; + case Commons.NetWork.Fail: + resetWifiContentView(); + ToastUtil.show(curActivity, Commons.Text.Repat); + break; + default: + resetWifiContentView(); + ToastUtil.show(curActivity, Commons.Text.ServerException); + break; + } + } + }; + + private void resetWifiContentView() { + ToastUtil.show(curActivity,"重置联网view"); + } + + Handler doPostBindDeviceHandler = new Handler() { + public void handleMessage(android.os.Message msg) { + + switch (msg.what) { + /** + * 1:绑定成功 + 0:绑定失败 + -4:请求验证失败,请重新登陆 + -5:请求被舍弃,未执行 + */ + case Commons.NetWork.Success: + if (deviceIsNull) {//当服务器返回的设备控制器数和定时器数为null的时候 不跳转进入主界面 + return; + } + boolean isSameName = false; + try { + if (Commons.DEVICE != null) { + if (Commons.DEVICE.size() != 0) { + for (int i = 0; i < Commons.DEVICE.size(); i++) { + if (device_mac.equals(Commons.DEVICE.get(i).getMacAddress())) { + sp.putInt(Commons.LoginSPKey.Position, i); + Commons.DevicePosition = i; + isSameName = true; + break; + } + } + } + } + } catch (Exception e) { + } + if (!isSameName) { + Commons.DEVICE.add(deviceObj); + try { + sp.putInt(Commons.LoginSPKey.Position, Commons.DEVICE.size() - 1); + Commons.DevicePosition = Commons.DEVICE.size() - 1; + } catch (Exception e) { + } + } + Commons.IS_EventBus = true; + Commons.HAVE_DEVICE = true;//改变判断是否绑定的变量 + Commons.IS_CAMERA = false; + sp.putBoolean(Commons.LoginSPKey.IS_CAMERA, Commons.IS_CAMERA); + Intent i = new Intent(); + try { + Integer controlAmount = Commons.DEVICE.get(Commons.DevicePosition).getControlAmount(); + Integer timerAmount = Commons.DEVICE.get(Commons.DevicePosition).getTimerAmount(); + String type = Commons.DEVICE.get(Commons.DevicePosition).type; + if (Commons.FishKey.On.equals(Commons.DEVICE.get(Commons.DevicePosition).isBlacklist)) {//黑名单 + i.setClass(curActivity, BlackListActivity.class); + } else { + if (Device.TYPE_1C.equals(type)) { + i.setClass(curActivity, MainThree1CControlActivity.class); + } else if (Device.TYPE_AA.equals(type)) { + i.setClass(curActivity, MainFiveControlActivity.class); + } else if (Device.TYPE_BD.equals(type)) { + i.setClass(curActivity, MainFiveBDControlActivity.class); + } else if (Device.TYPE_2A.equals(type)) { + i.setClass(curActivity, MainSix_2A_ControlActivity.class); + } else if (Device.TYPE_2B.equals(type)) { + i.setClass(curActivity, MainFour_2B_ControlActivity.class); + } else if (Device.TYPE_3A.equals(type)) { + i.setClass(curActivity, MainHot_3A_ControlActivity.class); + } else if (Device.TYPE_2F.equals(type)) { + i.setClass(curActivity, MainSeven_2F_ControlActivity.class); + } else if (Device.TYPE_3F.equals(type)) { + i.setClass(curActivity, MainFour_3F_ControlActivity.class); + } else if (Device.TYPE_4F.equals(type) || Device.TYPE_5F.equals(type)){ + i.setClass(curActivity, MainSix_4F_ControlActivity.class); + } else { + if (controlAmount == null) {//如果控制器返回空 则默认给三控的页面 + i.setClass(curActivity, MainThreeControlActivity.class); + } else { + i.setClass(curActivity, MainThreeControlActivity.class); + switch (controlAmount) { + case 0: { + i.setClass(curActivity, MainZeroControlActivity.class); + break; + } + case 2: { + i.setClass(curActivity, MainTwoControlActivity.class); + break; + } + case 3: { + i.setClass(curActivity, MainThreeControlActivity.class); + break; + } + case 4: { + if (timerAmount == 6) { // 可丽爱 + i.setClass(curActivity, MainFiveControlActivity.class); + } else {//4控 + i.setClass(curActivity, MainFourControlActivity.class); + } + break; + } + case 5: { + if (6 == timerAmount) {//5控六定时器 询多页面 + i.setClass(curActivity, MainSixControlActivity.class); + } + break; + } + case 8: { + i.setClass(curActivity, MainEightControlActivity.class); + break; + } + default: { + i.setClass(curActivity, MainThreeControlActivity.class); + break; + } + } + } + } + + + } + } catch (Exception e) { + i.setClass(curActivity, MainThreeControlActivity.class); + } + i.putExtra(BaseGradeActivity.BINDDEVICE, true);//绑定成功增加经验 + ToastUtil.show(curActivity, "绑定设备成功"); + curActivity.startActivity(i); + AnimationUtil.startAnimation(curActivity); + curActivity.finish(); + L.i("===================绑定设备成功=" + device_mac); + break; + case Commons.NetWork.Fail: + resetWifiContentView(); + ToastUtil.show(curActivity, "绑定设备失败 请重试"); +// ToastUtil.show(BindTankPetActivity.this, HttpManager.petdevice); + break; + case Commons.NetWork.DEVICETYPEERROR: + resetWifiContentView(); + ToastUtil.show(curActivity, "设备类型不匹配,请重新选择入口绑定"); + break; + case Commons.NetWork.ReLogin: + resetWifiContentView(); + ToastUtil.show(curActivity.getApplicationContext(), "请求验证失败 请重新登陆"); + Commons.clean(); + curActivity.startActivity(new Intent(curActivity, LoadingActivity.class)); + curActivity.finish(); + break; + case Commons.NetWork.ERROR: + resetWifiContentView(); + ToastUtil.show(curActivity.getApplicationContext(), Commons.Text.ERROR); + break; + case Commons.NetWork.NotImplemented: + resetWifiContentView(); + ToastUtil.show(curActivity.getApplicationContext(), Commons.Text.Unknown); + break; + default: + resetWifiContentView(); + ToastUtil.show(curActivity.getApplicationContext(), Commons.Text.ServerException); + break; + } + } + }; + } diff --git a/iFish7/src/main/java/com/ifish/activity/newbind/NewBindDeviceActivity.java b/iFish7/src/main/java/com/ifish/activity/newbind/NewBindDeviceActivity.java index 59e7c4363..d2dea3ba8 100644 --- a/iFish7/src/main/java/com/ifish/activity/newbind/NewBindDeviceActivity.java +++ b/iFish7/src/main/java/com/ifish/activity/newbind/NewBindDeviceActivity.java @@ -73,7 +73,7 @@ public class NewBindDeviceActivity extends AppCompatActivity { initWifiName(); checkWifiUtil = new CheckWifiUtil(); airKissUtil = new AirKissUtil(); - + airKissUtil.init(this); devicetype = getIntent().getStringExtra("devicetype"); //默认AP连网 curConnectType = ConnectType.APConnect;