From 8b227aa7f784762a03fc0aee9f0bd7074688c2bb Mon Sep 17 00:00:00 2001 From: Lihongda <963140097@qq.com> Date: Fri, 23 Feb 2024 02:54:08 +0800 Subject: [PATCH] =?UTF-8?q?AP=E8=BF=9E=E6=8E=A5=E6=94=B9=E9=80=A0=E6=88=90?= =?UTF-8?q?=E5=8A=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- iFish7/build.gradle | 1 + .../activity/HotSpotConnentActivity.java | 9 +- .../ifish/activity/newbind/CheckWifiUtil.java | 229 ++++++++++++++++++ .../newbind/NewBindDeviceActivity.java | 89 ++++++- .../com/ifish/baseclass/BaseApplication.java | 4 + .../src/main/java/com/ifish/utils/KVUtil.java | 91 +++++++ 6 files changed, 418 insertions(+), 5 deletions(-) create mode 100644 iFish7/src/main/java/com/ifish/activity/newbind/CheckWifiUtil.java create mode 100644 iFish7/src/main/java/com/ifish/utils/KVUtil.java diff --git a/iFish7/build.gradle b/iFish7/build.gradle index 8bbd6e6b1..027afa51d 100644 --- a/iFish7/build.gradle +++ b/iFish7/build.gradle @@ -156,5 +156,6 @@ dependencies { //友盟分享 // implementation files('libs/umeng_social_sdk.jar') + implementation 'com.tencent:mmkv:1.3.3' } \ No newline at end of file diff --git a/iFish7/src/main/java/com/ifish/activity/HotSpotConnentActivity.java b/iFish7/src/main/java/com/ifish/activity/HotSpotConnentActivity.java index 0b49d39c0..08357d718 100644 --- a/iFish7/src/main/java/com/ifish/activity/HotSpotConnentActivity.java +++ b/iFish7/src/main/java/com/ifish/activity/HotSpotConnentActivity.java @@ -105,7 +105,14 @@ public class HotSpotConnentActivity extends BaseActivity { } } - if(!is24G && is5G){ //之所以这样处理,是因为现在有的路由器支持2.4+5G双频同时存在 +// if(!is24G && is5G){ //之所以这样处理,是因为现在有的路由器支持2.4+5G双频同时存在 +// WifiDialog wd = new WifiDialog(HotSpotConnentActivity.this); +// wd.show("仅支持2.4G Wi-Fi网络,请重新选择", "去更改", et_wifiname); +// dismissProgressDialog(); +// return; +// } + + if(is5G){ //之所以这样处理,是因为现在有的路由器支持2.4+5G双频同时存在,但是它们却是同一个ssid WifiDialog wd = new WifiDialog(HotSpotConnentActivity.this); wd.show("仅支持2.4G Wi-Fi网络,请重新选择", "去更改", et_wifiname); dismissProgressDialog(); diff --git a/iFish7/src/main/java/com/ifish/activity/newbind/CheckWifiUtil.java b/iFish7/src/main/java/com/ifish/activity/newbind/CheckWifiUtil.java new file mode 100644 index 000000000..e2fc487ed --- /dev/null +++ b/iFish7/src/main/java/com/ifish/activity/newbind/CheckWifiUtil.java @@ -0,0 +1,229 @@ +package com.ifish.activity.newbind; + +import static android.content.Context.WIFI_SERVICE; + +import android.app.Dialog; +import android.content.Intent; +import android.net.wifi.ScanResult; +import android.net.wifi.WifiInfo; +import android.net.wifi.WifiManager; +import android.text.TextUtils; +import android.view.View; +import android.view.Window; +import android.widget.Button; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; + +import com.ifish.activity.HotSpotConnentDeviceActivity; +import com.ifish.activity.HotSpotConnentDeviceCameraActivity; +import com.ifish.activity.HotSpotConnentPetDeviceActivity; +import com.ifish.activity.R; +import com.ifish.utils.AnimationUtil; +import com.ifish.utils.KVUtil; +import com.ifish.utils.ToastUtil; +import com.ifish.utils.WifiUtil; +import com.ifish.wheelview.adapter.ArrayWheelAdapter; +import com.ifish.wheelview.view.WheelView; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +/** + * @ClassName: CheckWifiUtil + * @Description: 检查当前wifi密码 + * @Author: LiHongda + * @CreateDate: 2024/2/22 23:33 + */ +public class CheckWifiUtil { + + public boolean checkWifiCanUse(AppCompatActivity activity) { + WifiManager wifiManager = (WifiManager) activity.getApplicationContext().getSystemService(WIFI_SERVICE); + WifiInfo wifiInfo = wifiManager.getConnectionInfo(); + if (!wifiManager.isWifiEnabled()) { + ToastUtil.show(activity.getApplicationContext(), "请检查WiFi是否开启"); + return false; + } + String wifissid = wifiInfo.getSSID(); + wifissid = wifissid.replaceAll("\"", ""); + if (TextUtils.isEmpty(wifissid)) { + ToastUtil.show(activity.getApplicationContext(), "您没有连接WiFi"); + return false; + } + return true; + } + + /** + * 检查当前的wifi是否可以用来配网 + * + * @param activity + * @param wifiname + * @param wifipwd + * @return + */ + public boolean checkWifiCanUse(AppCompatActivity activity, String wifiname, String wifipwd) { + if (!checkWifiCanUse(activity)) { + return false; + } + + if (TextUtils.isEmpty(wifiname)) { + ToastUtil.show(activity.getApplicationContext(), "请输入路由器名称"); + return false; + } + WifiManager wifiManager = (WifiManager) activity.getApplicationContext().getSystemService(WIFI_SERVICE); + List scanResults = wifiManager.getScanResults(); + // 是否是 2.4G + boolean is24G = false; + // 是否是 5G + boolean is5G = false; + for (ScanResult scanResult : scanResults) { + if (wifiname.equals(scanResult.SSID)) { + int frequency = scanResult.frequency; + WifiUtil wifiUtil = new WifiUtil(activity); + if (wifiUtil.is24GHzWifi(frequency)) { + is24G = true; + } + if (wifiUtil.is5GHzWifi(frequency)) { + is5G = true; + } + } + } + +// if(!is24G && is5G){ //之所以这样处理,是因为现在有的路由器支持2.4+5G双频同时存在 +// WifiDialog wd = new WifiDialog(activity); +// wd.show("仅支持2.4G Wi-Fi网络,请重新选择", "去更改", et_wifiname); +// dismissProgressDialog(); +// return; +// } + + if (is5G) { + //既是2.4G也是5G + ToastUtil.show(activity.getApplicationContext(), "仅支持2.4G Wi-Fi网络,不支持2.4G和5G双频共存的网络,请重新选择"); + return false; + } + + if (TextUtils.isEmpty(wifipwd)) { + ToastUtil.show(activity.getApplicationContext(), "请输入路由器密码"); + return false; + } + //保存wifiname和wifipwd + KVUtil.setString(wifiname, wifipwd); + return true; + } + + //切换wifi弹框 + private Dialog wifiDialog; + + public List getWifiList(AppCompatActivity activity) { + WifiManager wifiManager = (WifiManager) activity.getApplicationContext().getSystemService(WIFI_SERVICE); + List scanWifiList = wifiManager.getScanResults(); + List wifiList = new ArrayList<>(); + if (scanWifiList != null && scanWifiList.size() > 0) { + HashMap signalStrength = new HashMap(); + for (int i = 0; i < scanWifiList.size(); i++) { + ScanResult scanResult = scanWifiList.get(i); + if (!scanResult.SSID.isEmpty()) { + String key = scanResult.SSID + " " + scanResult.capabilities; + if (!signalStrength.containsKey(key)) { + signalStrength.put(key, i); + wifiList.add(scanResult); + } + } + } + } + return wifiList; + } + + private void showHeatWenduDialog(AppCompatActivity activity, TextView tvWifiName) { + List wifiList = getWifiList(activity); + if (wifiList == null || wifiList.size() == 0) { + ToastUtil.show(activity, "未查找到周边WIFI"); + return; + } + final String[] wifis = new String[wifiList.size()]; + for (int i = 0; i < wifis.length; i++) { + wifis[i] = wifiList.get(i).SSID; + } + final WheelView wv_water; + Button bt_submit; + wifiDialog = new Dialog(activity, R.style.HOLOMyDialogs); + wifiDialog.setCancelable(true); + Window window = wifiDialog.getWindow(); + window.setContentView(R.layout.setwifi_dialog); + wv_water = (WheelView) window.findViewById(R.id.wv_water); + bt_submit = (Button) window.findViewById(R.id.bt_submit); + wv_water.setViewAdapter(new ArrayWheelAdapter(activity, wifis)); + wifiDialog.show(); + wv_water.setCurrentItem(0); + bt_submit.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + wifiDialog.dismiss(); + tvWifiName.setText(wifis[wv_water.getCurrentItem()]); + } + }); + } + + public String getCurWifiSsid(AppCompatActivity activity) { + WifiManager wifiManager = (WifiManager) activity.getApplicationContext().getSystemService(WIFI_SERVICE); + WifiInfo wifiInfo = wifiManager.getConnectionInfo(); + if (!wifiManager.isWifiEnabled()) { + ToastUtil.show(activity.getApplicationContext(), "请检查WiFi是否开启"); + return wifiInfo.getSSID(); + } + String wifissid = wifiInfo.getSSID(); + wifissid = wifissid.replaceAll("\"", ""); + if (TextUtils.isEmpty(wifissid)) { + ToastUtil.show(activity.getApplicationContext(), "您没有连接WiFi"); + return wifiInfo.getSSID(); + } + + return wifissid; + } + + public void checkCurAP(AppCompatActivity activity, String wifiName, String wifiPwd, String devicetype) { + String wifissid = getCurWifiSsid(activity); + if (TextUtils.isEmpty(wifissid)) { + wifissid = ""; + } + + Intent intent = new Intent(); + + if ("camera".equals(devicetype)) { + if (!wifissid.startsWith("GW_AP_")) { + ToastUtil.show(activity.getApplicationContext(), "请先连接摄像头设备热点"); + return; + } + //todo 摄像头 + intent.setClass(activity, HotSpotConnentDeviceCameraActivity.class); + } else if ("pet".equals(devicetype)) { + if (!wifissid.startsWith("ifish-")) { + ToastUtil.show(activity.getApplicationContext(), "请先连接宠物笼设备热点"); + return; + } + //todo 宠物 + intent.setClass(activity, HotSpotConnentPetDeviceActivity.class); + } else { + if (!wifissid.startsWith("ifish-")) { + ToastUtil.show(activity.getApplicationContext(), "请先连接设备热点"); + return; + } + //todo 设备 + intent.setClass(activity, HotSpotConnentDeviceActivity.class); + } + + if (wifissid.equals(wifiName)) { + ToastUtil.show(activity.getApplicationContext(), "WiFi名称不能和热点名称一致"); + return; + } + + intent.putExtra("wifiname", (!TextUtils.isEmpty(wifiName) ? wifiName : "")); + intent.putExtra("wifipwd", (!TextUtils.isEmpty(wifiPwd) ? wifiPwd : "")); + intent.putExtra("wifihotid", wifissid); + activity.startActivity(intent); + AnimationUtil.startAnimation(activity); + + } + +} 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 1ca7d27a4..05b7ca8db 100644 --- a/iFish7/src/main/java/com/ifish/activity/newbind/NewBindDeviceActivity.java +++ b/iFish7/src/main/java/com/ifish/activity/newbind/NewBindDeviceActivity.java @@ -1,6 +1,9 @@ package com.ifish.activity.newbind; +import android.content.Intent; import android.os.Bundle; +import android.provider.Settings; +import android.text.TextUtils; import android.view.View; import android.widget.EditText; import android.widget.FrameLayout; @@ -11,7 +14,13 @@ import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; import com.ifish.activity.R; +import com.ifish.basebean.ConnectMessageEvent; +import com.ifish.utils.KVUtil; import com.ifish.utils.ToastUtil; +import com.ifish.utils.WifiAdmin; +import com.lidroid.xutils.util.LogUtils; + +import de.greenrobot.event.EventBus; /** * @ClassName: NewBindDeviceActivity @@ -40,7 +49,13 @@ public class NewBindDeviceActivity extends AppCompatActivity { private BottomChoiceDialog bottomChoiceDialog; //----------------变量区--------------------// - private ConnectType curConnectType;//当前选择的连接类型 + private ConnectType curConnectType;//当前选择的连接类型 APConnect,SmartConfig,AirKiss + + //当前需要连接的是什么设备 + private String devicetype; + + //---------------工具类--------------------// + private CheckWifiUtil checkWifiUtil; @Override @@ -50,9 +65,35 @@ public class NewBindDeviceActivity extends AppCompatActivity { initTitle(); initView(); initListener(); + initWifiName(); + checkWifiUtil = new CheckWifiUtil(); + devicetype = getIntent().getStringExtra("devicetype"); //默认AP连网 curConnectType = ConnectType.APConnect; switchUIConnectType(curConnectType); + EventBus.getDefault().register(this); + } + + private void initWifiName() { + WifiAdmin wifiAdmin = new WifiAdmin(this); + String wifissid = wifiAdmin.getSSID(); + LogUtils.d("LHD 获取当前连接的wifi:" + wifissid); + wifissid = wifiAdmin.updateSsid(wifissid); + String wifiname = wifissid; + if (TextUtils.isEmpty(wifissid)) { + wifiname = ""; + } else { + if ("0x".equals(wifissid)) {//上次连接过wifi,但是中途断开,则会出现0x + wifiname = ""; + } + } + tvWifiName.setText(wifiname); + + if (!TextUtils.isEmpty(wifiname)) { + String pwd = KVUtil.getString(wifiname, ""); + tvWifiPwd.setText(pwd); + } + } private void initTitle() { @@ -114,8 +155,6 @@ public class NewBindDeviceActivity extends AppCompatActivity { tvClickButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - //todo 一系列判断逻辑 - checkAPLayout(); connectDevice(); } }); @@ -126,7 +165,7 @@ public class NewBindDeviceActivity extends AppCompatActivity { showProgress(true); tvApConnectDevice.setVisibility(View.GONE); //开始AP连接 - ToastUtil.show(NewBindDeviceActivity.this, "开始AP连接..."); + connectAP(); } }); } @@ -149,6 +188,8 @@ public class NewBindDeviceActivity extends AppCompatActivity { llWifiLayout.setVisibility(curIsAP ? View.GONE : View.VISIBLE); //ap连接提示布局 lineApTip.setVisibility(curIsAP ? View.VISIBLE : View.GONE); + //todo AP连接的提示要修改 + //通用提示布局 tvTips.setVisibility(curIsAP ? View.GONE : View.VISIBLE); } @@ -211,6 +252,12 @@ public class NewBindDeviceActivity extends AppCompatActivity { case APConnect: // 处理APConnect逻辑 ToastUtil.show(NewBindDeviceActivity.this, "开始AP连网..."); + //一系列判断逻辑 + boolean canConnect = checkWifiUtil.checkWifiCanUse(this, tvWifiName.getText().toString(), tvWifiPwd.getText().toString()); + if (canConnect) { + //开始AP连接 + checkAPLayout(); + } break; case AirKiss: // 处理AirKiss逻辑 @@ -219,4 +266,38 @@ public class NewBindDeviceActivity extends AppCompatActivity { } } + private boolean isJump = false; + + /** + * 1.跳转设置页面连接ifish-xxx的wifi,连接成功后返回 + */ + private void connectAP() { + isJump = true; + ToastUtil.show(NewBindDeviceActivity.this, "开始AP连接..."); + Intent i = new Intent(); + i = new Intent(Settings.ACTION_WIFI_SETTINGS); + startActivity(i); + } + + @Override + protected void onResume() { + super.onResume(); + if (isJump) { + String wifiName = tvWifiName.getText().toString(); + String wifiPwd = tvWifiPwd.getText().toString(); + checkWifiUtil.checkCurAP(this, wifiName, wifiPwd, devicetype); + isJump = false; + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + EventBus.getDefault().unregister(this); + } + + public void onEventMainThread(ConnectMessageEvent event) { + finish(); + } + } \ No newline at end of file diff --git a/iFish7/src/main/java/com/ifish/baseclass/BaseApplication.java b/iFish7/src/main/java/com/ifish/baseclass/BaseApplication.java index f06cad837..7783faa3d 100644 --- a/iFish7/src/main/java/com/ifish/baseclass/BaseApplication.java +++ b/iFish7/src/main/java/com/ifish/baseclass/BaseApplication.java @@ -30,9 +30,11 @@ import com.alibaba.sdk.android.push.huawei.HuaWeiRegister; import com.alibaba.sdk.android.push.noonesdk.PushServiceFactory; import com.alibaba.sdk.android.push.register.MiPushRegister; import com.ifish.activity.BuildConfig; +import com.ifish.utils.KVUtil; import com.ifish.utils.SystemUtil; import com.p2p.core.P2PSpecial.P2PSpecial; //import com.tencent.bugly.crashreport.CrashReport; +import com.tencent.mmkv.MMKV; import com.tendcloud.tenddata.TCAgent; import com.umeng.commonsdk.UMConfigure; import com.umeng.socialize.PlatformConfig; @@ -75,6 +77,8 @@ public class BaseApplication extends MultiDexApplication { initalipushSDK(); P2PSpecial.getInstance().init(app, APPID, APPToken, APPVersion); initLog(); + //初始化MMKV + KVUtil.init(this); } /** diff --git a/iFish7/src/main/java/com/ifish/utils/KVUtil.java b/iFish7/src/main/java/com/ifish/utils/KVUtil.java new file mode 100644 index 000000000..ebd2f37f9 --- /dev/null +++ b/iFish7/src/main/java/com/ifish/utils/KVUtil.java @@ -0,0 +1,91 @@ +package com.ifish.utils; + +import android.content.Context; +import androidx.annotation.NonNull; + +import com.tencent.mmkv.MMKV; + +/** + * key-value 工具类,包装微信MMKV + * + * @Company SINA + * Created by chenyuebo on 2019/5/16. + */ +public class KVUtil { + + public static void init(Context context) { + // 初始化微信key-value 组件,默认设定 MMKV 的根目录(files/mmkv/) + MMKV.initialize(context.getApplicationContext()); + } + + @NonNull + private static MMKV getMmkv() { + return MMKV.defaultMMKV(MMKV.MULTI_PROCESS_MODE, null); + } + + public static String getString(String key, String defValue) { + return getMmkv().getString(key, defValue); + } + + public static String getString(String key) { + return getString(key, null); + } + + + public static void setString(String key, String value) { + getMmkv().encode(key, value); + } + + public static boolean getBoolean(String key, boolean defValue) { + return getMmkv().decodeBool(key, defValue); + } + + public static boolean getBoolean(String key) { + return getMmkv().decodeBool(key); + } + + public static void setBoolean(String key, boolean value) { + getMmkv().encode(key, value); + } + + public static long getLong(String key, long defValue) { + return getMmkv().decodeLong(key, defValue); + } + + public static void setLong(String key, long value) { + getMmkv().encode(key, value); + } + + public static float getFloat(String key, float defValue) { + return getMmkv().decodeFloat(key, defValue); + } + + public static void setFloat(String key, float value) { + getMmkv().encode(key, value); + } + + public static int getInt(String key, int defValue) { + return getMmkv().decodeInt(key, defValue); + } + + public static int getInt(String key) { + return getMmkv().decodeInt(key); + } + + public static void setInt(String key, int value) { + getMmkv().encode(key, value); + } + + public static void removeValueForKey(String key) { + getMmkv().removeValueForKey(key); + } + + public static void removeValuesForKeys(String[] keys) { + getMmkv().removeValuesForKeys(keys); + } + + public static boolean containsKey(String key) { + return getMmkv().containsKey(key); + } + +}