From 1e0ab35f4601c8f42f09db0f3ec22b7e1ebecb2e Mon Sep 17 00:00:00 2001 From: jia Date: Sun, 22 Sep 2024 15:18:36 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=91=E5=AE=9A=E8=B7=B3=E8=BD=AC=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../newbind/NewBindDeviceActivity.java | 731 +++++++----------- .../com/ifish/fragment/DeviceFragment.java | 169 ---- .../main/java/com/ifish/utils/DialogUtil.kt | 21 +- .../activity_new_bind_device_choice.xml | 44 +- 4 files changed, 347 insertions(+), 618 deletions(-) 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 45e5dceca..9941e27ad 100644 --- a/iFish7/src/main/java/com/ifish/activity/newbind/NewBindDeviceActivity.java +++ b/iFish7/src/main/java/com/ifish/activity/newbind/NewBindDeviceActivity.java @@ -5,7 +5,6 @@ import android.annotation.SuppressLint; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; -import android.app.ProgressDialog; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothGatt; import android.content.DialogInterface; @@ -18,10 +17,10 @@ import android.os.Handler; import android.os.Message; import android.provider.Settings; import android.text.TextUtils; -import android.util.Log; import android.view.View; import android.widget.EditText; import android.widget.LinearLayout; +import android.widget.RelativeLayout; import android.widget.TextView; import androidx.annotation.NonNull; @@ -35,7 +34,6 @@ import com.clj.fastble.callback.BleScanCallback; import com.clj.fastble.callback.BleWriteCallback; import com.clj.fastble.data.BleDevice; import com.clj.fastble.exception.BleException; -import com.clj.fastble.scan.BleScanRuleConfig; import com.ifish.activity.BindCameraActivity; import com.ifish.activity.BindTankActivity; import com.ifish.activity.BindTankPetActivity; @@ -66,7 +64,6 @@ import com.ifish.tcp.BackFunctionCode7_11; import com.ifish.tcp.ModelCodec; import com.ifish.tcp.OrderDeviceConnectModel; import com.ifish.tcp.OrderModel; -import com.ifish.tcp.QueryTempeSettingModel; import com.ifish.tcp.ResetDeviceModel; import com.ifish.utils.ActivityManager; import com.ifish.utils.AnimationUtil; @@ -74,7 +71,6 @@ import com.ifish.utils.BlueToothUtil; import com.ifish.utils.ByteUtil; import com.ifish.utils.ClickUtil; import com.ifish.utils.Commons; -import com.ifish.utils.DialogUtil; import com.ifish.utils.HttpListener; import com.ifish.utils.HttpManager; import com.ifish.utils.L; @@ -86,7 +82,6 @@ import com.lidroid.xutils.util.LogUtils; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.List; -import java.util.UUID; import de.greenrobot.event.EventBus; @@ -109,6 +104,8 @@ public class NewBindDeviceActivity extends AppCompatActivity { private TextView tvOtherConnect; private TextView tvClickButton; private TextView tvConnectVideo; + private RelativeLayout layoutLoading; + private TextView dialogHint; private int nofity_type = 0; @@ -216,6 +213,8 @@ public class NewBindDeviceActivity extends AppCompatActivity { tvTips3 = (TextView) findViewById(R.id.tv_tips3); tvOtherConnect = (TextView) findViewById(R.id.tv_other_connect); tvClickButton = (TextView) findViewById(R.id.tv_click_button); + layoutLoading = (RelativeLayout) findViewById(R.id.layout_loading); + dialogHint = (TextView) findViewById(R.id.tv_hint); } @@ -434,8 +433,7 @@ public class NewBindDeviceActivity extends AppCompatActivity { if (TextUtils.isEmpty(type)){ blueScan(); }else { - DialogUtil.Companion.showLoadingDialog(activity,true,"开始连接蓝牙设备"); -// showProgressDialogCancelble("开始连接蓝牙设备"); + showDialog("开始连接蓝牙设备"); connectBle(); } }else { @@ -483,16 +481,14 @@ public class NewBindDeviceActivity extends AppCompatActivity { connectBle(); }else { ToastUtil.show(NewBindDeviceActivity.this,"扫描结束,没有搜索到可用设备"); -// dismissProgressDialogCancelble(); - DialogUtil.Companion.setLoadingDialogDismiss(activity); + dismissDialog(); } } @Override public void onScanStarted(boolean success) { // ToastUtil.show(NewBindDeviceActivity.this,"开始扫描"); - DialogUtil.Companion.showLoadingDialog(activity,true,"正在搜索附近设备,请确保设备处于配网状态"); -// showProgressDialogCancelble("正在搜索附近设备,请确保设备处于配网状态"); + showDialog("正在搜索附近设备,请确保设备处于配网状态"); } @SuppressLint("MissingPermission") @@ -601,7 +597,7 @@ public class NewBindDeviceActivity extends AppCompatActivity { @Override public void onNotifyFailure(BleException exception) { // dismissProgressDialogCancelble(); - DialogUtil.Companion.setLoadingDialogDismiss(activity); + dismissDialog(); } @Override @@ -621,25 +617,14 @@ public class NewBindDeviceActivity extends AppCompatActivity { String status = ByteUtil.toHex(model.getStatus()); device_mac = ByteUtil.bytesToHexString(model.getSrc()); - DialogUtil.Companion.setLoadingDialogDismiss(activity); + dismissDialog(); if (!TextUtils.isEmpty(device_mac)){ -// dismissProgressDialogCancelble(); - DialogUtil.Companion.setLoadingDialogDismiss(activity); -// showProgressDialogCancelble("正在绑定设备,请稍等..."); - DialogUtil.Companion.showLoadingDialog(activity,true,"正在绑定设备..."); + showDialog("正在绑定设备..."); connectDevice.cancel(); connectDevice.start(); } // checkoutMac(device_mac); - } else { - DialogUtil.Companion.setLoadingDialogDismiss(activity); -// dismissProgressDialogCancelble(); -// BackFunctionCode7_11 model = (BackFunctionCode7_11) object; -// String status = ByteUtil.toHex(model.getStatus()); -// if ("01".equals(status)) { -// L.i("jjia-------重启成功-"+status); -// } } L.i("jjia-------check_code-"+check_code); L.i("jjia-------length-"+length); @@ -649,54 +634,6 @@ public class NewBindDeviceActivity extends AppCompatActivity { }); } -// private void checkoutMac(String mac){ -// -// if (!TextUtils.isEmpty(mac)){ -// boolean isSameName = false; -// devicePosition = 0; -// try { -// if (Commons.DEVICE != null) { -// if (Commons.DEVICE.size() != 0) { -// for (int i = 0; i < Commons.DEVICE.size(); i++) { -// if (mac.equals(Commons.DEVICE.get(i).getMacAddress())) { -// devicePosition = i; -// isSameName = true; -// break; -// } -// } -// } -// } -// } catch (Exception e) { -// e.printStackTrace(); -// } -// -// -// if (isSameName){ -// L.i("jjia-------------不包含"); -// runOnUiThread(new Runnable() { -// @Override -// public void run() { -// resetDevice(1); -// } -// }); -// }else { -// L.i("jjia-------------不包含"); -// runOnUiThread(new Runnable() { -// @Override -// public void run() { -// isContinue = true; -// resetDevice(2); -// } -// }); -// } -// }else { -// dismissProgressDialogCancelble(); -// } -// -// -// -// -// } int devicePosition = 0; private void sendBleData(){ @@ -737,39 +674,8 @@ public class NewBindDeviceActivity extends AppCompatActivity { } }); } - private void resetDevice(int type){ - DialogUtil.Companion.setLoadingDialogDismiss(activity); - if (1==type){ - toDevice(); - }else if (2==type){ - connectDevice.cancel(); - connectDevice.start(); - } -// ResetDeviceModel model = OrderModel.resetDevice();//设置正式环境域名 -// byte[] data = ModelCodec.enCode(model);//解析数据 -// L.i("jjia----------------开始重启设备"+type); -// BleManager.getInstance().write(currentDevice, SERVICE_UUID, WRITE_UUID, data,false, new BleWriteCallback() { -// @Override -// public void onWriteSuccess(int current, int total, byte[] justWrite) { -// -// L.i("jjia----------------设备重启成功"); -// if (1==type){ -// toDevice(); -// }else if (2==type){ -// connectDevice.cancel(); -// connectDevice.start(); -// } -// } -// -// @Override -// public void onWriteFailure(BleException exception) { -// L.i("jjia----------------设备重启写失败"); -// } -// }); - } - public static final String SERVICE_UUID = "000000ff-0000-1000-8000-00805f9b34fb"; //蓝牙通讯服务 public static final String READ_UUID = "0000ff01-0000-1000-8000-00805f9b34fb"; //读特征 public static final String WRITE_UUID = "0000ff01-0000-1000-8000-00805f9b34fb"; //写特征 @@ -778,13 +684,13 @@ public class NewBindDeviceActivity extends AppCompatActivity { BleManager.getInstance().connect(currentDevice, new BleGattCallback() { @Override public void onStartConnect() { - DialogUtil.Companion.showLoadingDialog(activity,true,"开始连接蓝牙设备"); + showDialog("开始连接蓝牙设备"); } @Override public void onConnectFail(BleDevice bleDevice, BleException exception) { ToastUtil.show(NewBindDeviceActivity.this,"连接蓝牙设备失败,请重试"); - DialogUtil.Companion.setLoadingDialogDismiss(activity); + dismissDialog(); } @Override @@ -795,7 +701,7 @@ public class NewBindDeviceActivity extends AppCompatActivity { @Override public void onSetMTUFailure(BleException exception) { L.i("jjia-------MTU--"+exception.toString()); - DialogUtil.Companion.setLoadingDialogDismiss(activity); + dismissDialog(); } @Override @@ -812,14 +718,274 @@ public class NewBindDeviceActivity extends AppCompatActivity { } }); } + private Activity act; + private ConnectDevice connectDevice; + private boolean isContinue = true; + public class ConnectDevice extends CountDownTimer { - public void toDevice() { + public ConnectDevice(long millisInFuture, long countDownInterval) { + super(millisInFuture, countDownInterval); + } + + @Override + public void onTick(long millisUntilFinished) { + long sum = millisUntilFinished / 1000 % 2; + if (sum == 0) { + if (!act.isFinishing() && isContinue) { + isNetWorkAvailable("www.baidu.com", new Comparable() { + + @Override + public int compareTo(Boolean available) { + if (available) { + toReset(); + isContinue = false; + connectDevice.cancel(); + L.i("jjia-----------调用绑定接口---"); + doPostBindDevice(); + + } + return 0; + } + }); + } + } + } + + @Override + public void onFinish() { + if (isContinue) { + dismissDialog(); + } + } + } + + public static void isNetWorkAvailable(final String address, final Comparable callback) { + final Handler handler = new Handler() { + + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + if (callback != null) { + callback.compareTo(msg.arg1 == 0); + } + } + + }; + new Thread(new Runnable() { + + @Override + public void run() { + Runtime runtime = Runtime.getRuntime(); + Message msg = new Message(); + try { + Process pingProcess = runtime.exec("/system/bin/ping -c 1 " + address); + InputStreamReader isr = new InputStreamReader(pingProcess.getInputStream()); + BufferedReader buf = new BufferedReader(isr); + if (buf.readLine() == null) { + msg.arg1 = -1; + } else { + msg.arg1 = 0; + } + buf.close(); + isr.close(); + } catch (Exception e) { + msg.arg1 = -1; + e.printStackTrace(); + } finally { + runtime.gc(); + handler.sendMessage(msg); + } + } + + }).start(); + } + + private Device deviceObj; + private HttpManager hm = HttpManager.getInstance(); + private boolean deviceIsNull = false;///当服务器返回的设备控制器数和定时器数为null的时候 改变标记的值 不跳转进入主界面 + private int deviceIsNullNum = 0;//循环请求次数 + private CountDownTimer deviceIsNullTimer; + 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();//启动倒计时 + }else { + doPostBindDeviceHandler.sendEmptyMessage(result); + } + }else { + doPostBindDeviceHandler.sendEmptyMessage(result); + } + } + + @Override + public void finish() { + dismissDialog(); + } + + @Override + public void error(Exception e, String msg) { + result = Commons.NetWork.ERROR; + doPostBindDeviceHandler.sendEmptyMessage(result); + } + }, Commons.USER.getUserId(), device_mac); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public void startDeviceIsNullTimer() { + if (deviceIsNullTimer == null) { + showDialog("获取设备信息中..."); + 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() { + dismissDialog(); + deviceIsNullHandler.sendEmptyMessage(result); + } + + @Override + public void error(Exception e, String msg) { + dismissDialog(); + result = Commons.NetWork.ERROR; + } + }, deviceObj.getDeviceId(), Commons.USER.getUserId()); + } catch (Exception e) { + e.printStackTrace(); + dismissDialog(); + } + } + }; + } + deviceIsNullTimer.start(); + } + + @SuppressLint("HandlerLeak") + Handler doPostBindDeviceHandler = new Handler() { + public void handleMessage(Message msg) { + dismissDialog(); + switch (msg.what) { + /** + * 1:绑定成功 + 0:绑定失败 + -4:请求验证失败,请重新登陆 + -5:请求被舍弃,未执行 + */ + case Commons.NetWork.Success: + if (deviceIsNull) {//当服务器返回的设备控制器数和定时器数为null的时候 不跳转进入主界面 + return; + } + + List allDevices = Commons.DEVICE; + + Device deviceBean = null; + int index =0 ; + if (deviceObj!=null && deviceObj.getMacAddress()!=null && allDevices!=null && allDevices.size()>0){ + for (int i = 0;i() { - - @Override - public int compareTo(Boolean available) { - if (available) { - toReset(); - isContinue = false; - connectDevice.cancel(); - L.i("jjia-----------调用绑定接口---"); - doPostBindDevice(); - - } - return 0; - } - }); - } - } - } - - @Override - public void onFinish() { - if (isContinue) { - DialogUtil.Companion.setLoadingDialogDismiss(activity); - } - } - } - - public static void isNetWorkAvailable(final String address, final Comparable callback) { - final Handler handler = new Handler() { - - @Override - public void handleMessage(Message msg) { - super.handleMessage(msg); - if (callback != null) { - callback.compareTo(msg.arg1 == 0); - } - } - - }; - new Thread(new Runnable() { - - @Override - public void run() { - Runtime runtime = Runtime.getRuntime(); - Message msg = new Message(); - try { - Process pingProcess = runtime.exec("/system/bin/ping -c 1 " + address); - InputStreamReader isr = new InputStreamReader(pingProcess.getInputStream()); - BufferedReader buf = new BufferedReader(isr); - if (buf.readLine() == null) { - msg.arg1 = -1; - } else { - msg.arg1 = 0; - } - buf.close(); - isr.close(); - } catch (Exception e) { - msg.arg1 = -1; - e.printStackTrace(); - } finally { - runtime.gc(); - handler.sendMessage(msg); - } - } - - }).start(); - } - - private Device deviceObj; - private HttpManager hm = HttpManager.getInstance(); - private boolean deviceIsNull = false;///当服务器返回的设备控制器数和定时器数为null的时候 改变标记的值 不跳转进入主界面 - private int deviceIsNullNum = 0;//循环请求次数 - private CountDownTimer deviceIsNullTimer; - 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(); - } - } - - 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() { - DialogUtil.Companion.setLoadingDialogDismiss(activity); - deviceIsNullHandler.sendEmptyMessage(result); - } - - @Override - public void error(Exception e, String msg) { - DialogUtil.Companion.setLoadingDialogDismiss(activity); - result = Commons.NetWork.ERROR; - } - }, deviceObj.getDeviceId(), Commons.USER.getUserId()); - } catch (Exception e) { - e.printStackTrace(); - DialogUtil.Companion.setLoadingDialogDismiss(activity); - } - } - }; - } - deviceIsNullTimer.start(); - } - - @SuppressLint("HandlerLeak") - Handler doPostBindDeviceHandler = new Handler() { - public void handleMessage(Message msg) { -// dismissProgressDialog(); - switch (msg.what) { - /** - * 1:绑定成功 - 0:绑定失败 - -4:请求验证失败,请重新登陆 - -5:请求被舍弃,未执行 - */ - case Commons.NetWork.Success: - if (deviceIsNull) {//当服务器返回的设备控制器数和定时器数为null的时候 不跳转进入主界面 - return; - } - - List allDevices = Commons.DEVICE; - Boolean isHasDev = false; - if (deviceObj!=null && deviceObj.getMacAddress()!=null && allDevices!=null && allDevices.size()>0){ - for (int i = 0;i { -// dialog1.dismiss(); -// Intent intent = new Intent(); -// intent.setClass(requireActivity(), NewBindDeviceActivity.class); -// intent.putExtra("title", "连接水族箱"); -// intent.putExtra("type", "bluetooth"); -// intent.putExtra("device", currentDevice); -// startActivity(intent); -// AnimationUtil.finishAnimation(requireActivity()); -// }); -// dialog.show(); -// } -// }); -// } -// } -// } -// private void openNotify(){ -// BleManager.getInstance().notify(currentDevice, SERVICE_UUID, WRITE_UUID, new BleNotifyCallback() { -// @Override -// public void onNotifySuccess() { -// sendBleData(); -// } -// -// @Override -// public void onNotifyFailure(BleException exception) { -// dismissProgressDialogCancelble(); -// } -// -// @Override -// public void onCharacteristicChanged(byte[] data) { -// -// if (data!=null && data.length>0){ -// int check_code = data[1]; -// int length = data[14]; -// byte[] dataByte = new byte[length]; -// for (int i = 0; i < dataByte.length; i++) { -// dataByte[i] = data[i]; -// } -// -// Object object = ModelCodec.deCode(dataByte); -// if (object!=null && object instanceof BackFunctionCode7_11){ -// BackFunctionCode7_11 model = (BackFunctionCode7_11) object; -// device_mac = ByteUtil.bytesToHexString(model.getSrc()); -// checkoutMac(device_mac); -// } else { -// } -// L.i("jjia-------device_mac-"+device_mac); -// } -// } -// }); -// } -// private void connectBle(){ -// BleManager.getInstance().connect(currentDevice, new BleGattCallback() { -// @Override -// public void onStartConnect() { -// -// L.i("jjia---------conne------"); -// } -// -// @Override -// public void onConnectFail(BleDevice bleDevice, BleException exception) { -// } -// -// @Override -// public void onConnectSuccess(BleDevice bleDevice, BluetoothGatt gatt, int status) { -//// ToastUtil.show(NewBindDeviceActivity.this,"蓝牙连接成功"); -// BleManager.getInstance().setMtu(bleDevice, 512, new BleMtuChangedCallback() { -// @Override -// public void onSetMTUFailure(BleException exception) { -// } -// -// @Override -// public void onMtuChanged(int mtu) { -// openNotify(); -// } -// }); -// } -// -// @Override -// public void onDisConnected(boolean isActiveDisConnected, BleDevice device, BluetoothGatt gatt, int status) { -// } -// }); -// } private void initBooth(){ boolean enable = BleManager.getInstance().isBlueEnable(); if (enable) { diff --git a/iFish7/src/main/java/com/ifish/utils/DialogUtil.kt b/iFish7/src/main/java/com/ifish/utils/DialogUtil.kt index 87607510e..7f44382ce 100644 --- a/iFish7/src/main/java/com/ifish/utils/DialogUtil.kt +++ b/iFish7/src/main/java/com/ifish/utils/DialogUtil.kt @@ -7,23 +7,26 @@ import com.ifish.baseclass.BaseActivity * Created by achang on 2018/10/6. */ -class DialogUtil { +class DialogUtil1 { companion object { var mLoadingDialog: LoadingDialog? = null var showDialog:Boolean=false var hint:String?="正在加载中,请稍等片刻..." fun showLoadingDialog(activity: Activity?, showDialog:Boolean, hint:String?="正在加载中,请稍等片刻..."): LoadingDialog { this.showDialog= showDialog - if (mLoadingDialog == null && activity !=null) { - mLoadingDialog = LoadingDialog(activity,hint) - if (!mLoadingDialog!!.isShowing && !activity.isFinishing) { - mLoadingDialog!!.show() - } - } else { - if (!mLoadingDialog!!.isShowing && activity != null && !activity.isFinishing) { - mLoadingDialog!!.show() + if (activity!=null){ + if (mLoadingDialog == null) { + mLoadingDialog = LoadingDialog(activity,hint) + if (!mLoadingDialog!!.isShowing && !activity.isFinishing) { + mLoadingDialog!!.show() + } + } else { + if (!mLoadingDialog!!.isShowing && !activity.isFinishing) { + mLoadingDialog!!.show() + } } } + return mLoadingDialog!! } diff --git a/iFish7/src/main/res/layout/activity_new_bind_device_choice.xml b/iFish7/src/main/res/layout/activity_new_bind_device_choice.xml index acd237b16..e2a702367 100644 --- a/iFish7/src/main/res/layout/activity_new_bind_device_choice.xml +++ b/iFish7/src/main/res/layout/activity_new_bind_device_choice.xml @@ -1,5 +1,5 @@ - @@ -210,5 +211,44 @@ + + - \ No newline at end of file + + + + + + + + \ No newline at end of file