AP连接改造成功
This commit is contained in:
parent
ea8623ada8
commit
8b227aa7f7
|
|
@ -156,5 +156,6 @@ dependencies {
|
|||
//友盟分享
|
||||
// implementation files('libs/umeng_social_sdk.jar')
|
||||
|
||||
implementation 'com.tencent:mmkv:1.3.3'
|
||||
|
||||
}
|
||||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue