This commit is contained in:
fengjignqi
2026-07-13 14:54:21 +08:00
parent 3f0260a37a
commit a31443fa4c
8 changed files with 96 additions and 21 deletions

View File

@@ -45,6 +45,8 @@ import java.util.Set;
public class SelectWifiActivity extends BaseActivity<DeviceResetWifiBinding, DevicePresenter>
implements DeviceContract.DeviceView {
private static final long BLE_CONNECT_TIMEOUT = 40 * 1000L;
private WifiListAdapter wifiListAdapter;
//100 来自设备添加, 200 来自设备信息
private int WITCH_FROM_CODE = 100;
@@ -57,9 +59,23 @@ public class SelectWifiActivity extends BaseActivity<DeviceResetWifiBinding, Dev
private boolean isBleConnecting = false;
private boolean isBleConnected = false;
private boolean keepBleConnectionForProvision = false;
private Handler bleConnectHandler = new Handler();
private boolean isBleConnectTimedOut = false;
private boolean isBleConnectTimeoutRunning = false;
private Handler bleConnectHandler = new Handler(Looper.getMainLooper());
private AnimationDrawable animationDrawable;
private Handler handler = new Handler(Looper.getMainLooper());
private final Runnable bleConnectTask = new Runnable() {
@Override
public void run() {
connectBleDevice();
}
};
private final Runnable bleConnectTimeoutTask = new Runnable() {
@Override
public void run() {
handleBleConnectTimeout();
}
};
@Override
public DevicePresenter createPresenter() {
@@ -75,7 +91,7 @@ public class SelectWifiActivity extends BaseActivity<DeviceResetWifiBinding, Dev
@Override
protected void onDestroy() {
super.onDestroy();
bleConnectHandler.removeCallbacksAndMessages(null);
cancelBleConnectTask();
if (WITCH_FROM_CODE == 100 && espProvisionManager != null && !keepBleConnectionForProvision) {
espProvisionManager.disconnect();
espProvisionManager.setCallback(null);
@@ -219,6 +235,7 @@ public class SelectWifiActivity extends BaseActivity<DeviceResetWifiBinding, Dev
bundle.putString("wifi_password", wifiPassword);
bundle.putSerializable("ble_device_entity", mBleDeviceEntity);
keepBleConnectionForProvision = true;
cancelBleConnectTask();
goTo(mContext, DeviceConnectActivity.class, bundle);
finish();
}
@@ -231,6 +248,7 @@ public class SelectWifiActivity extends BaseActivity<DeviceResetWifiBinding, Dev
public void onConnecting() {
isBleConnecting = true;
isBleConnected = false;
startBleConnectTimeout();
Log.i("TEST","onConnecting");
}
@@ -238,6 +256,7 @@ public class SelectWifiActivity extends BaseActivity<DeviceResetWifiBinding, Dev
public void onConnected() {
isBleConnecting = false;
isBleConnected = true;
cancelBleConnectTask();
Log.i("TEST","onConnected设备连接成功");
stopConnectAnimation();
ToastUtil.showShort(mContext, getString(R.string.device_connected_success));
@@ -265,6 +284,7 @@ public class SelectWifiActivity extends BaseActivity<DeviceResetWifiBinding, Dev
@Override
public void onFailed(int errorCode, String message) {
cancelBleConnectTask();
isBleConnecting = false;
if (errorCode != 0) {
isBleConnected = espProvisionManager != null && espProvisionManager .isConnected();
@@ -279,8 +299,12 @@ public class SelectWifiActivity extends BaseActivity<DeviceResetWifiBinding, Dev
public void onDisconnected() {
isBleConnecting = false;
isBleConnected = false;
cancelBleConnectTask();
stopConnectAnimation();
Log.i("TEST","onDisconnected");
if (isBleConnectTimedOut) {
return;
}
ToastUtil.showShort(mContext, getString(R.string.device_disconnected));
}
@@ -306,13 +330,9 @@ public class SelectWifiActivity extends BaseActivity<DeviceResetWifiBinding, Dev
*/
private void scheduleBleConnect() {
startConnectAnimation();
bleConnectHandler.removeCallbacksAndMessages(null);
bleConnectHandler.postDelayed(new Runnable() {
@Override
public void run() {
connectBleDevice();
}
}, 1000);
startBleConnectTimeout();
bleConnectHandler.removeCallbacks(bleConnectTask);
bleConnectHandler.postDelayed(bleConnectTask, 1000);
}
private void connectBleDevice() {
@@ -326,6 +346,40 @@ public class SelectWifiActivity extends BaseActivity<DeviceResetWifiBinding, Dev
mBleDeviceEntity.getDeviceName());
}
private void startBleConnectTimeout() {
if (isBleConnected || keepBleConnectionForProvision) {
return;
}
if (isBleConnectTimeoutRunning) {
return;
}
isBleConnectTimedOut = false;
isBleConnectTimeoutRunning = true;
bleConnectHandler.removeCallbacks(bleConnectTimeoutTask);
bleConnectHandler.postDelayed(bleConnectTimeoutTask, BLE_CONNECT_TIMEOUT);
}
private void cancelBleConnectTask() {
isBleConnectTimeoutRunning = false;
bleConnectHandler.removeCallbacks(bleConnectTask);
bleConnectHandler.removeCallbacks(bleConnectTimeoutTask);
}
private void handleBleConnectTimeout() {
if (WITCH_FROM_CODE != 100 || isBleConnected || keepBleConnectionForProvision) {
return;
}
isBleConnectTimedOut = true;
isBleConnecting = false;
cancelBleConnectTask();
if (espProvisionManager != null) {
espProvisionManager.disconnect();
}
stopConnectAnimation();
ToastUtil.showShort(mContext, getString(R.string.ble_connect_timeout));
finish();
}
private void scanWifi() {
showLoadingDialog();
viewBinding.tvNext.setVisibility(View.GONE);