HDL_ON/Entity/FunctionList.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HDL_ON/UI/UI0-Stan/Logic/HdlBluetoothAndroidLogic.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HDL_ON/UI/UI0-Stan/Logic/HdlBluetoothIOSLogic.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HDL_ON/UI/UI2/4-PersonalCenter/AddDevice/AddMiniRemoteControlDirection2Page.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HDL_ON/UI/UI2/4-PersonalCenter/AddDevice/AddMiniRemoteControlDirection4Page.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
HDL_ON/Entity/FunctionList.cs
@@ -201,7 +201,11 @@ /// 加载功能列表 /// </summary> /// <param name="filePath"></param> public void IniFunctionList(string filePath) /// <param name="checkRepeat"> /// <para>考虑到性能问题追加此变量,是否检测重复,只对function有效</para> /// <para>true:当重复存在时,替换掉</para> /// <para>false:直接无条件添加</para></param> public void IniFunctionList(string filePath, bool checkRepeat = false) { // todo 增加设备,增加功能进功能列表 if (filePath.StartsWith("FunctionData_")) @@ -214,10 +218,21 @@ FileUtlis.Files.DeleteFile(filePath); return; } if (checkRepeat == true) { //检测重复 for (int i = 0; i < Functions.Count; i++) { if (Functions[i].deviceId == tempFunction.deviceId) { //先移除掉再加 Functions.RemoveAt(i); Functions.Add(tempFunction); return; } } } Functions.Add(tempFunction); } if (filePath.StartsWith("SceneData_")) { HDL_ON/UI/UI0-Stan/Logic/HdlBluetoothAndroidLogic.cs
@@ -119,17 +119,20 @@ /// <param name="FinishEvent">搜索结束的事件</param> public void ScanBluetooth(int waitTime, Action<List<BluetoothInfo>> FinishEvent) { //再次检测是否能够搜索蓝牙 this.CheckCanScanBluetooth((result) => HdlThreadLogic.Current.RunMain(() => { if (result == true) //再次检测是否能够搜索蓝牙 this.CheckCanScanBluetooth((result) => { HdlThreadLogic.Current.RunThread(() => if (result == true) { //开始搜索蓝牙 this.DoScanBluetooth(waitTime, FinishEvent); }); } HdlThreadLogic.Current.RunThread(() => { //开始搜索蓝牙 this.DoScanBluetooth(waitTime, FinishEvent); }); } }); }); } @@ -142,24 +145,36 @@ { var listBluetoothInfo = new List<BluetoothInfo>(); var adapter = Android.Bluetooth.BluetoothAdapter.DefaultAdapter; var scanner = adapter.BluetoothLeScanner; BluetoothScanCallback scanCallback = null; Android.Bluetooth.BluetoothAdapter adapter = null; Android.Bluetooth.LE.BluetoothLeScanner scanner = null; var scanCallback = new BluetoothScanCallback(); scanner.StartScan(null, new Android.Bluetooth.LE.ScanSettings.Builder().SetScanMode(Android.Bluetooth.LE.ScanMode.LowLatency).Build(), scanCallback); //以防万一,蓝牙都丢在主线程中运行 HdlThreadLogic.Current.RunMain(() => { adapter = Android.Bluetooth.BluetoothAdapter.DefaultAdapter; scanner = adapter.BluetoothLeScanner; scanCallback = new BluetoothScanCallback(); scanner.StartScan(null, new Android.Bluetooth.LE.ScanSettings.Builder().SetScanMode(Android.Bluetooth.LE.ScanMode.LowLatency).Build(), scanCallback); }, ShowErrorMode.NO); //等待 System.Threading.Thread.Sleep(waitTime * 1000); scanner.StopScan(scanCallback); adapter.Dispose(); foreach (var data in scanCallback.listData) HdlThreadLogic.Current.RunMain(() => { listBluetoothInfo.Add(data); } scanCallback.listData.Clear(); scanner.StopScan(scanCallback); adapter.Dispose(); FinishEvent?.Invoke(listBluetoothInfo); foreach (var data in scanCallback.listData) { listBluetoothInfo.Add(data); } scanCallback.listData.Clear(); FinishEvent?.Invoke(listBluetoothInfo); }); } /// <summary> @@ -231,24 +246,35 @@ /// <param name="connectEvent">因为需要对方反馈,所以使用回调(链接结果 false:连接失败 true:连接成功)</param> public void ContectBluetooth(BluetoothInfo bluetooth, Action<bool> connectEvent) { try HdlThreadLogic.Current.RunMain(() => { this.nowBlufiClient = new Blufi.Espressif.BlufiClient(Application.Activity, bluetooth.Device); //一个回调事件 var callback = new InnerGattCallback(); callback.ConnectionStateEvent += (div, newState) => try { if (div == 1) this.nowBlufiClient = new Blufi.Espressif.BlufiClient(Application.Activity, bluetooth.Device); //一个回调事件 var callback = new InnerGattCallback(); callback.ConnectionStateEvent += (div, newState) => { if (newState == Android.Bluetooth.ProfileState.Connected) if (div == 1) { //链接建立成功 connectEvent?.Invoke(true); //只通知一次 connectEvent = null; if (newState == Android.Bluetooth.ProfileState.Connected) { //链接建立成功 connectEvent?.Invoke(true); //只通知一次 connectEvent = null; } else if (newState == Android.Bluetooth.ProfileState.Disconnected) { //关闭链接 this.DisContectBluetooth(); connectEvent?.Invoke(false); //只通知一次 connectEvent = null; } } else if (newState == Android.Bluetooth.ProfileState.Disconnected) else if (div == -1) { //关闭链接 this.DisContectBluetooth(); @@ -256,50 +282,42 @@ //只通知一次 connectEvent = null; } } else if (div == -1) { //关闭链接 this.DisContectBluetooth(); connectEvent?.Invoke(false); //只通知一次 connectEvent = null; } }; nowBlufiClient.SetGattCallback(callback); }; nowBlufiClient.SetGattCallback(callback); //另外一个回调事件 var blufiCall = new BlufiCallbackMain(); blufiCall.StateEvent += (div, data) => //另外一个回调事件 var blufiCall = new BlufiCallbackMain(); blufiCall.StateEvent += (div, data) => { //-1:异常 1:正常 2:发送数据成功 3:发送数据失败 if (div == StatuEnum.A异常) { //关闭链接 this.DisContectBluetooth(); connectEvent?.Invoke(false); //只通知一次 connectEvent = null; } else if (div == StatuEnum.A发送成功 || div == StatuEnum.A发送失败) { sendStatuValue = div == StatuEnum.A发送成功 ? 1 : 0; } else if (div == StatuEnum.A蓝牙反馈) { //蓝牙返回的结果 this.ReceiveEvent?.Invoke(data); } }; nowBlufiClient.SetBlufiCallback(blufiCall); //执行链接 nowBlufiClient.Connect(); } catch { //-1:异常 1:正常 2:发送数据成功 3:发送数据失败 if (div == StatuEnum.A异常) { //关闭链接 this.DisContectBluetooth(); connectEvent?.Invoke(false); //只通知一次 connectEvent = null; } else if (div == StatuEnum.A发送成功 || div == StatuEnum.A发送失败) { sendStatuValue = div == StatuEnum.A发送成功 ? 1 : 0; } else if (div == StatuEnum.A蓝牙反馈) { //蓝牙返回的结果 this.ReceiveEvent?.Invoke(data); } }; nowBlufiClient.SetBlufiCallback(blufiCall); //执行链接 nowBlufiClient.Connect(); } catch { connectEvent?.Invoke(false); connectEvent = null; } connectEvent?.Invoke(false); connectEvent = null; } }); } /// <summary> @@ -488,9 +506,14 @@ try { this.sendStatuValue = -1; //发送数据 var byteData = System.Text.Encoding.UTF8.GetBytes(i_data); this.nowBlufiClient.PostCustomData(byteData); HdlThreadLogic.Current.RunMain(() => { //发送数据 var byteData = System.Text.Encoding.UTF8.GetBytes(i_data); this.nowBlufiClient.PostCustomData(byteData); }, ShowErrorMode.NO); if (waiTime == 0) { return true; } waiTime *= 5; HDL_ON/UI/UI0-Stan/Logic/HdlBluetoothIOSLogic.cs
@@ -151,17 +151,20 @@ /// <param name="FinishEvent">搜索结束的事件</param> public void ScanBluetooth(int waitTime, Action<List<BluetoothInfo>> FinishEvent) { //再次检测是否能够搜索蓝牙 this.CheckCanScanBluetooth((result) => HdlThreadLogic.Current.RunMain(() => { if (result == true) //再次检测是否能够搜索蓝牙 this.CheckCanScanBluetooth((result) => { HdlThreadLogic.Current.RunThread(() => if (result == true) { //开始搜索蓝牙 this.DoScanBluetooth(waitTime, FinishEvent); }); } HdlThreadLogic.Current.RunThread(() => { //开始搜索蓝牙 this.DoScanBluetooth(waitTime, FinishEvent); }); } }); }); } @@ -218,45 +221,48 @@ /// <param name="connectEvent">因为需要对方反馈,所以使用回调(链接结果 false:连接失败 true:连接成功)</param> public void ContectBluetooth(BluetoothInfo bluetooth, Action<bool> connectEvent) { try HdlThreadLogic.Current.RunMain(() => { //添加事件 ((BlueWifiDelegate)blufiClient.BlufiDelegate).StateEvent += (div, data) => try { //-1:异常 1:正常 2:发送数据成功 3:发送数据失败 if (div == StatuEnum.A异常) //添加事件 ((BlueWifiDelegate)blufiClient.BlufiDelegate).StateEvent += (div, data) => { //关闭链接 this.DisContectBluetooth(); connectEvent?.Invoke(false); //只通知一次 connectEvent = null; } else if (div == StatuEnum.A正常) { //链接建立成功 connectEvent?.Invoke(true); //只通知一次 connectEvent = null; } else if (div == StatuEnum.A发送成功 || div == StatuEnum.A发送失败) { sendStatuValue = div == StatuEnum.A发送成功 ? 1 : 0; } else if (div == StatuEnum.A蓝牙反馈) { //蓝牙返回的结果 this.ReceiveEvent?.Invoke(data); } }; //执行链接 this.blufiClient.Connect(bluetooth.Address); } catch { connectEvent?.Invoke(false); connectEvent = null; } //-1:异常 1:正常 2:发送数据成功 3:发送数据失败 if (div == StatuEnum.A异常) { //关闭链接 this.DisContectBluetooth(); connectEvent?.Invoke(false); //只通知一次 connectEvent = null; } else if (div == StatuEnum.A正常) { //链接建立成功 connectEvent?.Invoke(true); //只通知一次 connectEvent = null; } else if (div == StatuEnum.A发送成功 || div == StatuEnum.A发送失败) { sendStatuValue = div == StatuEnum.A发送成功 ? 1 : 0; } else if (div == StatuEnum.A蓝牙反馈) { //蓝牙返回的结果 this.ReceiveEvent?.Invoke(data); } }; //执行链接 this.blufiClient.Connect(bluetooth.Address); } catch { connectEvent?.Invoke(false); connectEvent = null; } }); } #endregion @@ -307,27 +313,17 @@ try { this.sendStatuValue = -1; if (waiTime == 0) HdlThreadLogic.Current.RunMain(() => { //发送数据 var data = new Foundation.NSData(); data = i_data; blufiClient.PostCustomData(data); //直接返回成功 return true; } else { //或许他用的是线程来调用 HdlThreadLogic.Current.RunMain(() => { //发送数据 var data = new Foundation.NSData(); data = i_data; blufiClient.PostCustomData(data); }, ShowErrorMode.NO); } }, ShowErrorMode.NO); if (waiTime == 0) { return true; } waiTime *= 5; while (this.sendStatuValue == -1 && waiTime > 0) { HDL_ON/UI/UI2/4-PersonalCenter/AddDevice/AddMiniRemoteControlDirection2Page.cs
@@ -21,6 +21,10 @@ /// wifi密码 /// </summary> private string wifiPassword = string.Empty; /// <summary> /// 蓝牙设备 /// </summary> private List<HdlBluetoothLogic.BluetoothInfo> listDevice = new List<HdlBluetoothLogic.BluetoothInfo>(); #endregion @@ -73,24 +77,8 @@ this.AddListMsgControls(bodyFrameLayout, strMsg, CSS.CSS_FontSize.TextFontSize, CSS.CSS_Color.FirstLevelTitleColor, Application.GetRealHeight(20), btnSearch.Bottom + Application.GetRealHeight(4)); //搜索时间(秒) int searchTime = 5; //搜索蓝牙(特效问题,加1秒) this.StartSearchBluetooth(searchTime + 1); HdlThreadLogic.Current.RunThread(() => { //进度条特效 for (int i = 0; i <= searchTime; i++) { HdlThreadLogic.Current.RunMain(() => { btnProgress.SetValue(i + 1, searchTime); }); System.Threading.Thread.Sleep(1000); } }); //开启进度条特效 this.StartProgressSpecialEffects(btnProgress); } #endregion @@ -98,15 +86,13 @@ #region ■ 搜索蓝牙___________________________ /// <summary> /// 安卓搜索蓝牙 /// 搜索蓝牙 /// </summary> /// <param name="i_searchTime">搜索时间(秒)</param> private void StartSearchBluetooth(int i_searchTime) private void StartSearchBluetooth() { //开始搜索蓝牙 HdlBluetoothLogic.Current.ScanBluetooth(i_searchTime, (listBluetooth) => HdlBluetoothLogic.Current.ScanBluetooth(2, (listBluetooth) => { var listDevice = new List<HdlBluetoothLogic.BluetoothInfo>(); foreach (var device in listBluetooth) { //只有这个标识,才是红外宝 @@ -120,18 +106,13 @@ { //摧毁蓝牙缓存 HdlBluetoothLogic.Current.Dispone(); //显示失败界面 HdlThreadLogic.Current.RunMain(() => { this.ShowFailView(); }); } else if (listDevice.Count == 1) { //如果只检测到一个,则直接连接 HdlBluetoothLogic.Current.ContectBluetooth(listDevice[0], (result) => { if (result == true) if (result == true && this.Parent != null) { //连接成功,则跳转到下一个界面 HdlThreadLogic.Current.RunMain(() => @@ -180,6 +161,63 @@ }); } /// <summary> /// 开启进度条特效 /// </summary> private void StartProgressSpecialEffects(ProgressRowBar btnProgress) { //搜索时间(秒) int searchTime = 180; HdlThreadLogic.Current.RunThread(() => { //进度条特效 for (int i = 1; i <= searchTime; i++) { System.Threading.Thread.Sleep(1000); HdlThreadLogic.Current.RunMain(() => { //进度条特效 btnProgress.SetValue(i, searchTime); }); //界面关闭 if (this.Parent == null) { break; } //如果已经搜索到蓝牙,则直接到100% if (listDevice.Count > 0) { HdlThreadLogic.Current.RunMain(() => { btnProgress.SetValue(searchTime, searchTime); }); break; } if (i % 5 == 1) { //每5秒搜索一次 this.StartSearchBluetooth(); } //超时 if (i >= searchTime) { System.Threading.Thread.Sleep(3000); //最后的时间还是搜不到的话 if (listDevice.Count == 0) { //显示失败界面 HdlThreadLogic.Current.RunMain(() => { this.ShowFailView(); }); } break; } } }); } #endregion #region ■ 显示选择蓝牙列表的界面_____________ @@ -191,6 +229,8 @@ /// <param name="selectEvent">选择事件(考虑到Ios和安卓,所以这样定参数)</param> private void ShowBluetoothListView(List<string> listName, Action<int> selectEvent) { if (this.Parent == null) { return; } HdlThreadLogic.Current.RunMain(() => { var contr = new BottomItemSelectControl(listName.Count, Language.StringByID(StringId.ChooseInfraredRemoteControl), false); HDL_ON/UI/UI2/4-PersonalCenter/AddDevice/AddMiniRemoteControlDirection4Page.cs
@@ -317,13 +317,49 @@ /// <summary> /// 刷新红外宝信息 /// </summary> private void RefreshMiniRemoteControlInfo() /// <param name="successEvent">成功的回调事件</param> private void RefreshMiniRemoteControlInfo(Action successEvent) { var pra = new Dictionary<string, object>(); pra.Add("homeId", Entity.DB_ResidenceData.Instance.CurrentRegion.RegionID); pra.Add("spk", Entity.SPK.IrModule); var requestJson = DAL.Server.HttpUtil.GetSignRequestJson(pra); DAL.Server.HttpUtil.RequestHttpsPostFroHome(DAL.Server.NewAPI.Api_Post_GetDevcieList, requestJson); HdlThreadLogic.Current.RunThread(() => { int count = 0; while (this.Parent != null) { try { //超过5次都不成功,真不处理了 count++; if (count > 5) { return; } //获取全部红外宝列表 var result = DAL.Server.HttpUtil.RequestHttpsPostFroHome(DAL.Server.NewAPI.Api_Post_GetDevcieList, requestJson); if (result == null || result.Code != DAL.Server.StateCode.SUCCESS) { System.Threading.Thread.Sleep(3000); continue; } var listDevice = Newtonsoft.Json.JsonConvert.DeserializeObject<Entity.DevcieApiPack>(result.Data.ToString()); foreach (var newFunction in listDevice.list) { //添加到缓存当中 newFunction.SaveFunctionFile(); Entity.FunctionList.List.IniFunctionList(newFunction.savePath, true); } //调用回调函数 successEvent?.Invoke(); return; } catch { System.Threading.Thread.Sleep(3000); } } }); } #endregion @@ -343,15 +379,16 @@ return; } //刷新红外宝信息 this.RefreshMiniRemoteControlInfo(); this.RefreshMiniRemoteControlInfo(() => { //移除这个事件 HdlCloudReceiveLogic.Current.RemoveCloudReceiveEvent("AddMiniRemoteControlDirection4Page"); //停止线程 this.timeoutThreadActivity = false; //接收到就移除这个事件 HdlCloudReceiveLogic.Current.RemoveCloudReceiveEvent("AddMiniRemoteControlDirection4Page"); //停止线程 this.timeoutThreadActivity = false; //添加设备成功之后,处理一些东西 this.DoSomethingAfterAddDeviceSuccess(); //添加设备成功之后,处理一些东西 this.DoSomethingAfterAddDeviceSuccess(); }); } /// <summary> HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPage.cs
@@ -337,11 +337,6 @@ == false ? StringId.Administrators : StringId.Member }; userTypeView.AddChidren(btnUserTypeName); btnUserTypeIcon.MouseUpEventHandler += (sender, e) => { var form = new AddThirdPartyDeviceMenuListPage(); form.AddForm("Evoyo"); }; #endregion #region 住宅管理