hxb
2022-11-22 b3513b1713bb979d0a69c5a8c4ddcd038f184e6e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
package com.mm.android.deviceaddmodule.helper;
 
import android.annotation.TargetApi;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkRequest;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
 
import com.company.NetSDK.CFG_NETAPP_WLAN;
import com.company.NetSDK.DEVICE_NET_INFO_EX;
import com.company.NetSDK.FinalVar;
import com.company.NetSDK.INetSDK;
import com.dahua.mobile.utility.network.DHWifiUtil;
import com.lechange.opensdk.media.DeviceInitInfo;
import com.mm.android.deviceaddmodule.DeviceAddActivity;
import com.mm.android.deviceaddmodule.event.DeviceAddEvent;
import com.mm.android.deviceaddmodule.mobilecommon.AppConsume.ProviderManager;
import com.mm.android.deviceaddmodule.mobilecommon.annotation.DeviceAbility;
import com.mm.android.deviceaddmodule.mobilecommon.entity.deviceadd.DeviceAddInfo;
import com.mm.android.deviceaddmodule.mobilecommon.p2pDevice.P2PErrorHelper;
import com.mm.android.deviceaddmodule.mobilecommon.utils.LogUtil;
import com.mm.android.deviceaddmodule.model.DeviceAddModel;
 
import org.greenrobot.eventbus.EventBus;
import org.json.JSONException;
import org.json.JSONObject;
 
public class DeviceAddHelper {
    public static final String DEVICE_MODEL_NAME_PARAM= "device_model_name_param";               //设备市场型号
    public static final int DEVICE_NAME_MAX_LENGTH = 20;        //设备名长度限制
    public static final int AP_NAME_MAX_LENGTH = 20;            //配件名长度限制
    public static final String AP_WIFI_NAME_DAP = "DAP-XXXX";         //软Ap通用设备热点名称
    public static final String AP_WIFI_VERSION_V1 = "V1";            //软Ap wifi version版本
    public static final String AP_WIFI_VERSION_V2 = "V2";            //软Ap wifi version版本
 
    // 是否支持新声波,二进制第1位,0表示否,1表示是
    public static final int ALLOW_SoundWaveV2 = 1; // 0001
 
    // 是否支持老声波,二进制第2位,0表示否,1表示是
    public static final int ALLOW_SoundWave = 1 << 1; // 0010
 
    // 是否支持SmartConfig,二进制第3位,0表示否,1表示是
    public static final int ALLOW_SmartConfig = 1 << 2; // 0100
 
    // 是否支持SoftAP,二进制第4位,0表示否,1表示是
    public static final int ALLOW_SoftAP = 1 << 3; // 1000
 
    // 是否支持LAN,二进制第4位,0表示否,1表示是
    public static final int ALLOW_LAN = 1 << 4; // 10000
 
    // 是否支持蓝牙,二进制第4位,0表示否,1表示是
    public static final int ALLOW_BT = 1 << 5; // 100000
 
    public enum TitleMode {
//        FLASH,          //闪光灯
        MORE,           //更多
        MORE2,           //更多模式2
        MORE3,           //更多模式3
        MORE4,           //更多模式4
        REFRESH,         //刷新
        BLANK,           //空白
        SHARE,            //设备共享
        FREE_CLOUD_STORAGE, //免费云存储
        MODIFY_DEVICE_NAME  //修改设备密码
    }
 
    public enum TimeoutDevTypeModel {
        A_MODEL,            //A系列
        CK_MODEL,           //CK系列
        COMMON_MODEL,      //通用设备
        DOORBELL_MODEL,    //门铃系列
        AP_MODEL,           //配件
        OTHER_MODEL,         //其他
        TP1_MODEL,          //TP1类型
        TP1S_MODEL,         //TP1S类型
        G1_MODEL,           //G1类型
        K5_MODEL     //门锁类型
    }
 
    //设备添加相关错误码
    public interface ErrorCode {
        //输入设备序列号流程相关错误码
        int INPUT_SN_ERROR_BIND_BY_OTHER = 1000 + 1;                 //输入序列号时设备被其他用户绑定
        int DEVICE_BIND_ERROR_BIND_BY_OTHER = 1000 + 2;              //绑定时设备被其他用户绑定
        int DEVICE_BIND_ERROR_NOT_SUPPORT_TO_BIND = 1000 + 3;         //扫码、选型号、设备上线绑定时不支持绑定的设备类型
        //设备选择流程相关错误码
        int TYPE_CHOOSE_ERROR_1 = 2000;
        //有线无线配置流程相关错误码
        int WIRED_WIRELESS_ERROR_CONFIG_TIMEOUT = 3000 + 1;      //配置超时
        //软AP添加流程相关错误码
        int SOFTAP_ERROR_CONNECT_HOT_FAILED = 4000 + 1;        //连接设备热点失败
        int SOFTAP_ERROR_CONNECT_WIFI_FAILED = 4000 + 2;        //设备连接wifi失败
        //设备初始化流程相关错误码
        int INIT_ERROR_SERCRITY_CHECK_TIMEOUT = 5000 + 1;        //安全检查超时
        int INIT_ERROR_INIT_FAILED = 5000 + 2;                     //初始化失败
        //连接云平台流程相关错误码
        int CLOUND_CONNECT_ERROR_CONNECT_TIMEOUT = 6000 + 1;                     //连接超时
        int CLOUND_CONNECT_QUERY_STATUS_TIMEOUT = 6000 + 2;                     //查询超时
 
        //通用
        int COMMON_ERROR_NOT_SUPPORT_5G = 7000 + 1;                             //不支持5G
        int COMMON_ERROR_NOT_SUPPORT_RESET = 7000 + 2;                             //重置设备
        int COMMON_ERROR_NOT_SUPPORT_HUB_AP_RESET = 7000 + 3;                             //重置设备
        int COMMON_ERROR_NOT_SUPPORT_HUB_RESET = 7000 + 4;                             //重置设备
 
        int COMMON_ERROR_DEVICE_LOCKED = 7000 + 5;                          //设备锁定
        int COMMON_ERROR_RED_ROTATE = 7000 + 6;                          //红灯旋转
        int COMMON_ERROR_RED_ALWAYS = 7000 + 7;                          //红灯长亮
        int COMMON_ERROR_RED_FLASH = 7000 + 8;                          //红灯闪烁
        int COMMON_ERROR_DEVICE_BIND_MROE_THAN_TEN = 7000 + 9;                          //超过10次
        int COMMON_ERROR_DEVICE_MROE_THAN_TEN_TWICE = 7000 + 10;                          //再次超过10次
        int COMMON_ERROR_DEVICE_IP_ERROR = 7000 + 11;                          //IP
        int COMMON_ERROR_DEVICE_SN_CODE_CONFLICT = 7000 + 12;                          //串号
        int COMMON_ERROR_DEVICE_SN_OR_IMEI_NOT_MATCH = 7000 + 13;                          //imei和device id不匹配
 
        int COMMON_ERROR_ABOUT_WIFI_PWD = 7000 + 14;                             //关于WIFI密码
 
        int COMMON_ERROR_CONNECT_FAIL = 7000 + 15;                             //软AP连接失败
        int COMMON_ERROR_WIFI_NAME = 7000 + 16;                             //软AP连接失败
 
        //配件
        int AP_ERROR_PAIR_TIMEOUT = 8000 + 2;                                   //配对超时
    }
 
    //OMS配置key
    public interface OMSKey {
        final static String ERROR_TIPS_TYPE = "ErrorTipsType";
        final static String ERROR_WIFI_TIPS_TYPE = "WifiErrorTipsType";             //有线无线配网错误页面模式
        final static String ERROR_SOFTAP_TIPS_TYPE = "SoftAPErrorTipsType";         //软AP配网错误页面模式
        final static String ERROR_ACCESSORY_TIPS_TYPE = "AccessoryErrorTipsType";   //配件配网错误页面模式
        //有线无线
        final static String WIFI_MODE_GUIDING_LIGHT_IMAGE = "WifiModeGuidingLightImage";
        final static String WIFI_MODE_CONFIG_INTRODUCTION = "WifiModeConfigIntroduction";
        final static String WIFI_MODE_CONFIG_CONFIRM_INTRODUCTION = "WifiModeConfigConfirmIntroduction";
        final static String WIFI_MODE_RESET_GUIDE_INTRODUCTION = "WifiModeResetGuideIntroduction";
        final static String WIFI_MODE_RESET_IMAGE = "WifiModeResetImage";
        final static String WIFI_MODE_RESET_OPERATION_INTRODUCTION = "WifiModeResetOperationIntroduction";
        final static String WIFI_MODE_FINISH_DEVICE_IMAGE = "WifiModeFinishDeviceImage";
        //软AP
        final static String SOFT_AP_MODE_WIFI_NAME = "SoftAPModeWifiName";
        final static String SOFT_AP_MODE_GUIDING_STEP_ONE_IMAGE = "SoftAPModeGuidingStepOneImage";
        final static String SOFT_AP_MODE_GUIDING_STEP_ONE_INTRODUCTION = "SoftAPModeGuidingStepOneIntroduction";
        final static String SOFT_AP_MODE_GUIDING_STEP_TWO_IMAGE = "SoftAPModeGuidingStepTwoImage";
        final static String SOFT_AP_MODE_GUIDING_STEP_TWO_INTRODUCTION = "SoftAPModeGuidingStepTwoIntroduction";
        final static String SOFT_AP_MODE_GUIDING_STEP_THREE_IMAGE = "SoftAPModeGuidingStepThreeImage";
        final static String SOFT_AP_MODE_GUIDING_STEP_THREE_INTRODUCTION = "SoftAPModeGuidingStepThreeIntroduction";
        final static String SOFT_AP_MODE_GUIDING_STEP_FOUR_IMAGE = "SoftAPModeGuidingStepFourImage";
        final static String SOFT_AP_MODE_GUIDING_STEP_FOUR_INTRODUCTION = "SoftAPModeGuidingStepFourIntroduction";
        final static String SOFT_AP_MODE_RESET_GUIDE_INTRODUCTION = "SoftAPModeResetGuideIntroduction";
        final static String SOFT_AP_MODE_RESET_IMAGE = "SoftAPModeResetImage";
        final static String SOFT_AP_MODE_RESET_OPERATION_INTRODUCTION = "SoftAPModeResetOperationIntroduction";
        final static String SOFT_AP_MODE_RESULT_PROMPT_IMAGE = "SoftAPModeResultPromptImage";
        final static String SOFT_AP_MODE_RESULT_INTRODUCTION = "SoftAPModeResultIntroduction";
        final static String SOFT_AP_MODE_CONFIRM_INTRODUCTION = "SoftAPModeConfirmIntroduction";
        final static String SOFT_AP_MODE_WIFI_VERSION = "SoftAPModeWifiVersion";
        //配件
        final static String ACCESSORY_MODE_PAIR_STATUS_IMAGE = "AccessoryModePairStatusImage";
        final static String ACCESSORY_MODE_PAIR_OPERATION_INTRODUCTION = "AccessoryModePairOperationIntroduction";
        final static String ACCESSORY_MODE_PAIR_CONFIRM_INTRODUCTION = "AccessoryModePairConfirmIntroduction";
        final static String ACCESSORY_MODE_RESET_GUIDE_INTRODUCTION = "AccessoryModeResetGuideIntroduction";
        final static String ACCESSORY_MODE_RESET_IMAGE = "AccessoryModeResetImage";
        final static String ACCESSORY_MODE_RESET_OPERATION_INTRODUCTION = "AccessoryModeResetOperationIntroduction";
        final static String ACCESSORY_MODE_FINISH_DEVICE_IMAGE = "AccessoryModeFinishDeviceImage";
        //Hub
        final static String HUB_MODE_PAIR_STATUS_IMAGE = "HubModePairStatusImage";
        final static String HUB_MODE_PAIR_OPERATION_INTRODUCTION = "HubModePairOperationIntroduction";
        final static String HUB_MODE_RESET_GUIDE_INTRODUCTION = "HubModeResetGuideIntroduction";
        final static String HUB_MODE_RESET_IMAGE = "HubModeResetImage";
        final static String HUB_MODE_RESET_OPERATION_INTRODUCTION = "HubModeResetOperationIntroduction";
        final static String HUB_ACCESSORY_MODE_PAIR_STATUS_IMAGE = "HubAccessoryModePairStatusImage";
        final static String HUB_ACCESSORY_MODE_PAIR_OPERATION_INTRODUCTION = "HubAccessoryModePairOperationIntroduction";
        final static String HUB_ACCESSORY_MODE_RESET_GUIDE_INTRODUCTION = "HubAccessoryModeResetGuideIntroduction";
        final static String HUB_ACCESSORY_MODE_RESET_IMAGE = "HubAccessoryModeResetImage";
        final static String HUB_ACCESSORY_MODE_RESET_OPERATION_INTRODUCTION = "HubAccessoryModeResetOperationIntroduction";
        final static String HUB_MODE_RESULT_PROMPT_IMAGE = "HUBModeResultPromptImage";
        final static String HUB_MODE_RESULT_INTRODUCTION = "HUBModeResultIntroduction";
        final static String HUB_MODE_CONFIRM_INTRODUCTION = "HUBModeConfirmIntroduction";
        //设备本地配网
        final static String LOCATION_MODE_OPERATION_IMAGE = "LocationOperationImages";  //引导图
        final static String LOCATION_MODE_OPERATION_INTRODUCTION = "LocationOperationIntroduction";    //引导文案
        final static String LOCATION_MODE_FINISH_DEVICE_IMAGE = "LocationModeFinishDeviceImage";    //添加完成正视图
        // NB
        final static String THIRD_PARTY_PLATFORM_MODE_GUIDING_LIGHT_IMAGE = "ThirdPartyPlatformModeGuidingLightImage";  //引导图
        final static String THIRD_PARTY_PLATFORM_MODE_RESULT_PROMPT_IMAGE = "ThirdPartyPlatformModeResultPromptImage";
    }
 
    public static void updateTile(TitleMode titleMode) {
        Bundle bundle = new Bundle();
        bundle.putString(DeviceAddEvent.KEY.TITLE_MODE, titleMode.name());
        EventBus.getDefault().post(new DeviceAddEvent(DeviceAddEvent.TITLE_MODE_ACTION, bundle));
    }
 
    //判断设备是否需要初始化
    public static boolean isDeviceNeedInit(DeviceInitInfo device_net_info_ex) {
        byte[] s = getByteArray(device_net_info_ex.mInitStatus);
        // 设备初始化状态,按位确定初始化状态
        // bit0~1:0-老设备,没有初始化功能 1-未初始化帐号 2-已初始化帐户
        // bit2~3:0-老设备,保留 1-公网接入未使能 2-公网接入已使能
        // bit4~5:0-老设备,保留 1-手机直连未使能 2-手机直连使能
        if (s[s.length - 1] != 1) {
            return false;
        } else {
            return true;
        }
    }
 
    //判断设备是否已经初始化
    public static boolean isDeviceInited(DeviceInitInfo device_net_info_ex) {
        byte[] s = getByteArray(device_net_info_ex.mInitStatus);
        // 设备初始化状态,按位确定初始化状态
        // bit0~1:0-老设备,没有初始化功能 1-未初始化帐号 2-已初始化帐户
        // bit2~3:0-老设备,保留 1-公网接入未使能 2-公网接入已使能
        // bit4~5:0-老设备,保留 1-手机直连未使能 2-手机直连使能
        if (s[s.length - 1] != 2) {
            return false;
        } else {
            return true;
        }
    }
 
    //判断设备是否支持初始化,仅在软AP添加流程中使用(为了兼容K5不支持初始化,需要用默认用admin登录设备)。其余添加流程仅判断是否需要初始化即可,需要的弹框用户输入,不需要的跳过。
    public static boolean isDeviceSupportInit(DeviceInitInfo device_net_info_ex){
        byte[] s = getByteArray(device_net_info_ex.mInitStatus);
        // 设备初始化状态,按位确定初始化状态
        // bit0~1:0-老设备,没有初始化功能 1-未初始化帐号 2-已初始化帐户
        // bit2~3:0-老设备,保留 1-公网接入未使能 2-公网接入已使能
        // bit4~5:0-老设备,保留 1-手机直连未使能 2-手机直连使能
        if (s[s.length - 2] != 1) {
            return false;
        } else {
            return true;
        }
    }
 
    /**
     * 获取配置,3代协议
     *
     * @param loginHandle
     * @param channelID
     * @param strCommand
     * @param BUFFERLEN
     * @param stCfg
     * @return
     */
    public static boolean getNewDevConfig(long loginHandle, int channelID, String strCommand, int BUFFERLEN, CFG_NETAPP_WLAN stCfg, String requestId) {
        boolean ret = false;
        //netsdk 使用局限,只能使用 类对象传递参数。
        Integer error = new Integer(0);
        char szBuffer[] = new char[BUFFERLEN];
        ret = INetSDK.GetNewDevConfig(loginHandle, strCommand, channelID, szBuffer, BUFFERLEN, error, 5 * 1000);
        if (!ret) {
            return false;
        }
        ret = INetSDK.ParseData(strCommand, szBuffer, stCfg, null);
        if (!ret) {
            return false;
        }
        return true;
    }
 
    /**
     * 判断是否是设备用户名或密码错误
     *
     * @param error
     */
    public static boolean isDevPwdError(int error) {
        return (error == P2PErrorHelper.LOGIN_ERROR_KEY_OR_USER_MISMATCH
                || error == P2PErrorHelper.LOGIN_ERROR_KEY_MISMATCH
                || error == FinalVar.NET_LOGIN_ERROR_PASSWORD
                || error == FinalVar.NET_USER_FLASEPWD
                || error == FinalVar.NET_LOGIN_ERROR_USER_OR_PASSOWRD);
    }
 
    public static byte[] getByteArray(byte b) {
        byte[] array = new byte[8];
        for (int i = 7; i >= 0; i--) {
            array[i] = (byte) (b & 1);
            b = (byte) (b >> 1);
        }
        return array;
    }
 
    /**
     * 字符过滤
     * @param str
     * @return
     */
    public static String strDeviceNameFilter(String str) {
        if (TextUtils.isEmpty(str)) {
            return str;
        }
        StringBuilder builder = new StringBuilder();
        String strEx = "^[a-zA-Z0-9\\-\u4E00-\u9FA5\\_\\@\\s]+";
 
        for (int i = 0; i < str.length(); i++) {
            String temp = str.substring(i, i + 1);
            if (temp.matches(strEx)) {
                builder.append(temp);
            }
        }
        return builder.toString();
    }
 
    /**
     * 支持sc码添加
     * @param deviceAddInfo
     * @return
     */
    public static boolean isSupportAddBySc(DeviceAddInfo deviceAddInfo) {
        if(deviceAddInfo == null) {
            return false;
        }
        if(!TextUtils.isEmpty(deviceAddInfo.getSc()) && deviceAddInfo.getSc().length() == 8) {
            return true;
        }
        if(deviceAddInfo.hasAbility(DeviceAbility.SCCode)) {
            return true;
        }
        return false;
    }
 
    /**
     * 支持SC码的设备,使用SC码作为设备密码
     */
    public static void setDevicePwdBySc() {
        DeviceAddInfo deviceAddInfo = DeviceAddModel.newInstance().getDeviceInfoCache();
        if(DeviceAddHelper.isSupportAddBySc(deviceAddInfo)) {
            deviceAddInfo.setDevicePwd(deviceAddInfo.getSc());
        }
    }
 
    /**
     * 支持2代声波
     * @param deviceAddInfo
     * @return
     */
    public static boolean isSupportSoundWaveV2(DeviceAddInfo deviceAddInfo) {
        if(deviceAddInfo == null) {
            return false;
        }
        return deviceAddInfo.getConfigMode() != null && deviceAddInfo.getConfigMode().contains(DeviceAddInfo.ConfigMode.SoundWaveV2.name());
    }
 
    public static  String getJsonString(DeviceAddInfo deviceAddInfo, boolean offlineConfigType) {
        JSONObject result = new JSONObject();
        try {
            result.put("SN", deviceAddInfo.getDeviceSn());
            if(offlineConfigType) {
                result.put("deviceModelName", deviceAddInfo.getDeviceModel());
            } else {
                result.put("SC", deviceAddInfo.getSc());
            }
        } catch (JSONException e){
            e.printStackTrace();
        }
        return result.toString();
    }
 
    // 打印错误码
    public static int printError() {
        int error = (INetSDK.GetLastError() & 0x7fffffff);
        LogUtil.debugLog("DeviceAddHelper", "error:" + error);
        return error;
    }
 
 
    public interface BindNetworkListener{
        void onBindWifiListener();
    }
 
    /**
     * 指定手机走wifi链路
     */
    public static void bindNetwork(final BindNetworkListener bindNetworkListener){
        final ConnectivityManager connectivityManager = (ConnectivityManager)
                ProviderManager.getAppProvider().getAppContext().getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkRequest.Builder builder;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            builder = new NetworkRequest.Builder();
            //set the transport type do WIFI
            builder.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN)
                    .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
                    .build();
            connectivityManager.requestNetwork(builder.build(), new ConnectivityManager.NetworkCallback() {
 
                @TargetApi(Build.VERSION_CODES.M)
                @Override
                public void onAvailable(Network network) {
                    LogUtil.debugLog(DeviceAddActivity.TAG, "bindNetwork succuss");
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                        connectivityManager.bindProcessToNetwork(null);
                        connectivityManager.bindProcessToNetwork(network);
                    } else {
                        //This method was deprecated in API level 23
                        ConnectivityManager.setProcessDefaultNetwork(null);
                        ConnectivityManager.setProcessDefaultNetwork(network);
                    }
                    connectivityManager.unregisterNetworkCallback(this);
                    if(bindNetworkListener != null){
                        bindNetworkListener.onBindWifiListener();
                    }
                }
            });
        }
    }
 
    /**
     * 清除网络链路配置,注意软ap调用过{@link #bindNetwork},需要在合适的时机释放,否则无法连外网
     */
    public static void clearNetWork(){
        LogUtil.debugLog(DeviceAddActivity.TAG, "clearNetWork succuss");
        final ConnectivityManager connectivityManager = (ConnectivityManager)
                ProviderManager.getAppProvider().getAppContext().getSystemService(Context.CONNECTIVITY_SERVICE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            connectivityManager.bindProcessToNetwork(null);
        } else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
            //This method was deprecated in API level 23
            ConnectivityManager.setProcessDefaultNetwork(null);
        }
    }
 
    /**
     * 连接之前的wifi
     * @return
     */
    public static void connectPreviousWifi(){
        DeviceAddInfo deviceAddInfo = DeviceAddModel.newInstance().getDeviceInfoCache();
        String previousSsid = deviceAddInfo.getPreviousSsid();
        if(!TextUtils.isEmpty(previousSsid)) {
            deviceAddInfo.setPreviousSsid("");
            DHWifiUtil wifiUtil = new DHWifiUtil(ProviderManager.getAppProvider().getAppContext());
            wifiUtil.connectWifi(previousSsid, "");
        }
    }
}