AP连接改造成功

This commit is contained in:
Lihongda 2024-02-23 02:54:08 +08:00
parent ea8623ada8
commit 8b227aa7f7
6 changed files with 418 additions and 5 deletions

View File

@ -156,5 +156,6 @@ dependencies {
//
// implementation files('libs/umeng_social_sdk.jar')
implementation 'com.tencent:mmkv:1.3.3'
}

View File

@ -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();

View File

@ -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<ScanResult> 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<ScanResult> getWifiList(AppCompatActivity activity) {
WifiManager wifiManager = (WifiManager) activity.getApplicationContext().getSystemService(WIFI_SERVICE);
List<ScanResult> scanWifiList = wifiManager.getScanResults();
List<ScanResult> wifiList = new ArrayList<>();
if (scanWifiList != null && scanWifiList.size() > 0) {
HashMap<String, Integer> signalStrength = new HashMap<String, Integer>();
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<ScanResult> 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<String>(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);
}
}

View File

@ -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();
}
}

View File

@ -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);
}
/**

View File

@ -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);
}
}