更换wifi扫描模式,从设备获取回传Wifi列表。
This commit is contained in:
@@ -1,13 +1,9 @@
|
|||||||
package com.ckkj.water.device;
|
package com.ckkj.water.device;
|
||||||
|
|
||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
import android.content.BroadcastReceiver;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.net.wifi.ScanResult;
|
|
||||||
import android.net.wifi.WifiManager;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
@@ -26,6 +22,8 @@ import com.ckkj.water.device.mvp.DeviceImpl;
|
|||||||
import com.ckkj.water.device.mvp.DevicePresenter;
|
import com.ckkj.water.device.mvp.DevicePresenter;
|
||||||
import com.ckkj.water.espBle.EspProvisionManager;
|
import com.ckkj.water.espBle.EspProvisionManager;
|
||||||
import com.ckkj.water.espBle.ProvisionCallback;
|
import com.ckkj.water.espBle.ProvisionCallback;
|
||||||
|
import com.espressif.provisioning.WiFiAccessPoint;
|
||||||
|
import com.espressif.provisioning.listeners.WiFiScanListener;
|
||||||
import com.ckkj.water.index.entity.WaterDeviceEntity;
|
import com.ckkj.water.index.entity.WaterDeviceEntity;
|
||||||
import com.ckkj.water.network.BaseBean;
|
import com.ckkj.water.network.BaseBean;
|
||||||
import com.ckkj.water.permission.PermissionActivity;
|
import com.ckkj.water.permission.PermissionActivity;
|
||||||
@@ -45,9 +43,7 @@ import java.util.Set;
|
|||||||
public class SelectWifiActivity extends BaseActivity<DeviceResetWifiBinding, DevicePresenter>
|
public class SelectWifiActivity extends BaseActivity<DeviceResetWifiBinding, DevicePresenter>
|
||||||
implements DeviceContract.DeviceView {
|
implements DeviceContract.DeviceView {
|
||||||
|
|
||||||
private WifiManager wifiManager;
|
|
||||||
private WifiListAdapter wifiListAdapter;
|
private WifiListAdapter wifiListAdapter;
|
||||||
private WifiScanReceiver wifiScanReceiver;
|
|
||||||
//100 来自设备添加, 200 来自设备信息
|
//100 来自设备添加, 200 来自设备信息
|
||||||
private int WITCH_FROM_CODE = 100;
|
private int WITCH_FROM_CODE = 100;
|
||||||
|
|
||||||
@@ -68,23 +64,9 @@ public class SelectWifiActivity extends BaseActivity<DeviceResetWifiBinding, Dev
|
|||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
|
|
||||||
wifiScanReceiver = new SelectWifiActivity.WifiScanReceiver();
|
|
||||||
ActivityManager.addActivity(this,getClass().getSimpleName() + "_" + ConstantUtil.ADD_DEVICE_FLAG);
|
ActivityManager.addActivity(this,getClass().getSimpleName() + "_" + ConstantUtil.ADD_DEVICE_FLAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onResume() {
|
|
||||||
super.onResume();
|
|
||||||
registerReceiver(wifiScanReceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPause() {
|
|
||||||
super.onPause();
|
|
||||||
unregisterReceiver(wifiScanReceiver);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onDestroy() {
|
protected void onDestroy() {
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
@@ -333,20 +315,37 @@ public class SelectWifiActivity extends BaseActivity<DeviceResetWifiBinding, Dev
|
|||||||
private void scanWifi() {
|
private void scanWifi() {
|
||||||
showLoadingDialog();
|
showLoadingDialog();
|
||||||
viewBinding.tvNext.setVisibility(View.GONE);
|
viewBinding.tvNext.setVisibility(View.GONE);
|
||||||
if (wifiManager != null && wifiManager.isWifiEnabled()) {
|
|
||||||
wifiManager.startScan();
|
if (espProvisionManager == null || !espProvisionManager.isConnected()) {
|
||||||
} else {
|
ToastUtil.showShort(mContext, "设备未连接,请稍后重试");
|
||||||
ToastUtil.showShort(mContext, getString(R.string.wifi_not_enabled));
|
|
||||||
hideDialogLoading();
|
hideDialogLoading();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
espProvisionManager.scanWifiFromDevice(new WiFiScanListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onWifiListReceived(ArrayList<WiFiAccessPoint> wifiList) {
|
||||||
|
runOnUiThread(() -> displayWifiListFromDevice(wifiList));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onWiFiScanFailed(Exception e) {
|
||||||
|
runOnUiThread(() -> {
|
||||||
|
ToastUtil.showShort(mContext, "扫描失败: " + e.getMessage());
|
||||||
|
hideDialogLoading();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void displayWifiList(List<ScanResult> scanResults) {
|
private void displayWifiListFromDevice(ArrayList<WiFiAccessPoint> wifiNetworks) {
|
||||||
Set<String> wifiSet = new HashSet<>();
|
Set<String> wifiSet = new HashSet<>();
|
||||||
List<String> wifiNameList = new ArrayList<>();
|
List<String> wifiNameList = new ArrayList<>();
|
||||||
|
|
||||||
for (ScanResult result : scanResults) {
|
for (WiFiAccessPoint network : wifiNetworks) {
|
||||||
String wifiName = result.SSID;
|
String wifiName = network.getWifiName();
|
||||||
if (wifiName != null && !wifiName.isEmpty() && !wifiSet.contains(wifiName)) {
|
if (wifiName != null && !wifiName.isEmpty() && !wifiSet.contains(wifiName)) {
|
||||||
wifiSet.add(wifiName);
|
wifiSet.add(wifiName);
|
||||||
wifiNameList.add(wifiName);
|
wifiNameList.add(wifiName);
|
||||||
@@ -390,31 +389,6 @@ public class SelectWifiActivity extends BaseActivity<DeviceResetWifiBinding, Dev
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private class WifiScanReceiver extends BroadcastReceiver {
|
|
||||||
@Override
|
|
||||||
public void onReceive(Context context, Intent intent) {
|
|
||||||
if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(intent.getAction())) {
|
|
||||||
boolean success = intent.getBooleanExtra(WifiManager.EXTRA_RESULTS_UPDATED, false);
|
|
||||||
if (success) {
|
|
||||||
if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
|
|
||||||
// TODO: Consider calling
|
|
||||||
// ActivityCompat#requestPermissions
|
|
||||||
// here to request the missing permissions, and then overriding
|
|
||||||
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
|
|
||||||
// int[] grantResults)
|
|
||||||
// to handle the case where the user grants the permission. See the documentation
|
|
||||||
// for ActivityCompat#requestPermissions for more details.
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
List<ScanResult> results = wifiManager.getScanResults();
|
|
||||||
displayWifiList(results);
|
|
||||||
} else {
|
|
||||||
ToastUtil.showShort(mContext, getString(R.string.wifi_scan_failed));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getLayoutResId(Bundle savedInstanceState) {
|
public int getLayoutResId(Bundle savedInstanceState) {
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -325,6 +325,28 @@ public class EspProvisionManager {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过蓝牙请求 ESP32 扫描周围 WiFi
|
||||||
|
* @param scanListener 扫描结果监听器
|
||||||
|
*/
|
||||||
|
public void scanWifiFromDevice(WiFiScanListener scanListener) {
|
||||||
|
if (!checkConnected()) {
|
||||||
|
if (scanListener != null) {
|
||||||
|
scanListener.onWiFiScanFailed(new Exception("设备未连接"));
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (espDevice == null) {
|
||||||
|
if (scanListener != null) {
|
||||||
|
scanListener.onWiFiScanFailed(new Exception("设备实例为空"));
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
espDevice.scanNetworks(scanListener);
|
||||||
|
}
|
||||||
|
|
||||||
public void disconnect() {
|
public void disconnect() {
|
||||||
boolean shouldNotify = connected || connecting || provisioning;
|
boolean shouldNotify = connected || connecting || provisioning;
|
||||||
mainHandler.removeCallbacks(connectRetryTask);
|
mainHandler.removeCallbacks(connectRetryTask);
|
||||||
|
|||||||
Reference in New Issue
Block a user