using System; using System.Collections.Generic; using System.Text; namespace Shared.SimpleControl.Phone { /// /// 搜索和写加密网关、绑定网关的页面 /// public class GuideAddGateway : FrameLayout { static GuideAddGateway inView; static VerticalScrolViewLayout verticalScrolView; static List addedList = new List (); public GuideAddGateway () { BackgroundColor = SkinStyle.Current.MainColor; inThisView = true; //var secretKeyPack = HttpServerRequest.Current.ApplyDeviceSecret ("3782DACE9D900428"); //if (secretKeyPack != null) { // if (secretKeyPack.Code == StateCode.SUCCESS) { // var pack = Newtonsoft.Json.JsonConvert.DeserializeObject (secretKeyPack.Data.ToString ()); // if (pack != null) { // byte [] usefullBytes = new byte [17]; // usefullBytes [0] = 1; // byte [] ddd = System.Text.Encoding.ASCII.GetBytes (pack.deviceSecret); // Array.Copy (ddd, 0, usefullBytes, 1, 16 < ddd.Length ? 16 : ddd.Length); // } // } //} } public override void RemoveFromParent () { inView = null; base.RemoveFromParent (); inThisView = false; } /// /// 修改网关备注 /// static void ResetGatewayName (GatewayBase gatewayBase, Button nameButton1) { Dialog dialog = new Dialog (); var dialogView = new FrameLayout (); dialogView.MouseUpEventHandler += (sn, dd) => { dialog.Close (); }; dialog.AddChidren (dialogView); var bodyView = new FrameLayout () { Gravity = Gravity.Center, Width = Application.GetRealWidth (500), Height = Application.GetRealHeight (400), Radius = 5, BorderColor = SkinStyle.Current.Transparent, BorderWidth = 0, BackgroundColor = SkinStyle.Current.DialogColor, }; dialogView.AddChidren (bodyView); var btnTitle = new Button () { Height = Application.GetRealHeight (80), TextAlignment = TextAlignment.Center, Text = "Setting", TextColor = SkinStyle.Current.DialogTextColor, BackgroundColor = SkinStyle.Current.DialogTitle, }; bodyView.AddChidren (btnTitle); var btnZoneName = new Button () { X = Application.GetRealWidth (50), Y = btnTitle.Bottom + Application.GetRealHeight (10), Width = Application.GetRealWidth (400), Height = Application.GetRealHeight (80), TextAlignment = TextAlignment.CenterLeft, TextColor = SkinStyle.Current.TextColor, Text = "Gateway Name : " }; bodyView.AddChidren (btnZoneName); var etRemark = new EditText () { X = Application.GetRealWidth (50), Y = btnZoneName.Bottom + Application.GetRealHeight (10), Width = Application.GetRealWidth (400), Height = Application.GetRealHeight (80), TextColor = SkinStyle.Current.TextColor, TextAlignment = TextAlignment.Center, Radius = 5, BorderColor = SkinStyle.Current.BorderColor, BorderWidth = 2, Text = gatewayBase.Name, }; bodyView.AddChidren (etRemark); etRemark.EditorEnterAction += (obj) => { Application.HideSoftInput (); }; //if (MainPage.LoginUser.AccountType == 1) { // etRemark.Enable = false; // etRemark.BorderWidth = 0; //} var BottomView = new FrameLayout () { Y = Application.GetRealHeight (400 - 88), Height = Application.GetRealHeight (90), BackgroundColor = SkinStyle.Current.Black50Transparent, }; bodyView.AddChidren (BottomView); var btnClose = new Button () { Width = Application.GetRealWidth (250), TextID = R.MyInternationalizationString.cancel, TextColor = SkinStyle.Current.DialogTextColor, BackgroundColor = SkinStyle.Current.DialogTitle, TextAlignment = TextAlignment.Center, }; BottomView.AddChidren (btnClose); btnClose.MouseUpEventHandler += (bb, cc) => { dialog.Close (); }; var btnOption = new Button () { X = btnClose.Right + 1, Width = Application.GetRealWidth (250), TextID = R.MyInternationalizationString.OK, TextColor = SkinStyle.Current.DialogTextColor, BackgroundColor = SkinStyle.Current.DialogTitle, TextAlignment = TextAlignment.Center, }; btnOption.MouseUpEventHandler += (sdf, fds) => { dialog.Close (); if (etRemark.Text.Trim () == "") { new Alert ("", "Please enter gateway name", Language.StringByID (R.MyInternationalizationString.Close)).Show (); return; } gatewayBase.Name = etRemark.Text.Trim (); CommonPage.UpdateRemark (gatewayBase.SubnetID, gatewayBase.DeviceID, etRemark.Text.Trim ()); nameButton1.Text = etRemark.Text.Trim (); IO.FileUtils.SaveEquipmentMessage (gatewayBase); }; BottomView.AddChidren (btnOption); dialog.Show (); } public void ShowPage (RegionInfoRes home) { ////2020-01-14 第一次进入页面默认 //UserConfig.Instance.IsLocalEncrypt = false; addedList = new List (); inView = this; #region 标题 var topView = new FrameLayout () { Y = Application.GetRealHeight (36), Height = Application.GetRealHeight (90), Width = Application.GetRealWidth (640), }; AddChidren (topView); var title = new Button () { TextAlignment = TextAlignment.Center, Text = home.Name, TextColor = SkinStyle.Current.TextColor1, TextSize = 19, }; topView.AddChidren (title); var logo = new Button () { Width = Application.GetRealWidth (154), Height = Application.GetRealHeight (90), X = Application.GetRealWidth (486), UnSelectedImagePath = MainPage.LogoString, }; topView.AddChidren (logo); logo.MouseUpEventHandler += (dd, fff) => { #if DEBUG verticalScrolView.RemoveAll (); addedList.Clear (); SearchGatewayList (); #endif }; var back = new Button () { Height = Application.GetRealHeight (90), Width = Application.GetRealWidth (85), UnSelectedImagePath = "Item/Back.png", SelectedImagePath = "Item/BackSelected.png", }; topView.AddChidren (back); back.MouseUpEventHandler += (sender, e) => { //重置为加密模式 UserConfig.Instance.IsLocalEncrypt = true; (Parent as PageLayout).PageIndex -= 1; }; #endregion verticalScrolView = new VerticalScrolViewLayout () { Y = Application.GetRealHeight (126), //Y = waitView.Bottom, Height = Application.GetRealHeight (1136 - 126 - 0), BackgroundColor = SkinStyle.Current.ViewColor }; AddChidren (verticalScrolView); SearchGatewayList (); } //static DateTime waitingTime = DateTime.Now; //static int sleepTime = 0; public static void InitGatewayRowView (GatewayBase common) { if (inView == null) return; lock (addedList) { if (addedList.Find ((obj) => obj.SubnetID == common.SubnetID && obj.DeviceID == common.DeviceID) != null) return; addedList.Add (common); var gatewayView = new RowLayout () { Height = Application.GetRealHeight (120), BackgroundColor = SkinStyle.Current.ViewColor, }; verticalScrolView.AddChidren (gatewayView); var pointButton1 = new Button () { Width = Application.GetRealHeight (13), Height = Application.GetRealHeight (13), X = Application.GetRealWidth (60), UnSelectedImagePath = "Item/Point.png", SelectedImagePath = "Item/PointSelected.png", Gravity = Gravity.CenterVertical, }; gatewayView.AddChidren (pointButton1); var nameButton1 = new Button () { Width = Application.GetRealWidth (342), Height = LayoutParams.MatchParent, Text = common.Name, TextAlignment = TextAlignment.CenterLeft, X = pointButton1.Right + Application.GetRealWidth (20), TextColor = SkinStyle.Current.TextColor1 }; gatewayView.AddChidren (nameButton1); var rightButton1 = new Button () { X = Application.GetRealWidth (550), Width = Application.GetRealWidth (28), Height = Application.GetRealHeight (40), Gravity = Gravity.CenterVertical, UnSelectedImagePath = "Item/Right.png", SelectedImagePath = "Item/RightSelected.png", }; gatewayView.AddChidren (rightButton1); var goNextRight = new Button () { X = Application.GetRealWidth (550), Width = Application.GetRealWidth (80), }; gatewayView.AddChidren (goNextRight); var btnDel = new Button () { Text = "Delete", BackgroundColor = SkinStyle.Current.DelColor, }; gatewayView.AddRightView (btnDel); btnDel.MouseUpEventHandler += (sender, e) => { var delAlert = new Alert ("", "If you delete gateway, you will not able to control the devices. Still you want to delete the gateway?", "No", "Yes"); delAlert.Show (); delAlert.ResultEventHandler += (sender1, e1) => { if (e1) { var delFile = IO.FileUtils.ReadFiles ().FindAll ((w) => { return (w.Split ('_') [0] == "Equipment") && (w.Split ('_') [2] == common.SubnetID.ToString ()); }); for (int k = 0; k < delFile.Count; k++) { if (delFile [k].Contains (DeviceType.OnePortWirelessFR.ToString ()) || delFile [k].Contains (DeviceType.OnePortMqttFR.ToString ()) || delFile [k].Contains (DeviceType.OnePortBus.ToString ()) || delFile [k].Contains (DeviceType.RCU.ToString ()) || delFile [k].Contains (DeviceType.SuperWireless.ToString ())) { continue; } IO.FileUtils.DeleteFile (delFile [k]); } addedList.Remove (common); gatewayView.RemoveFromParent (); } }; }; EventHandler eHandler = (sender, e) => { //跳转之前先绑定APP MainPage.Loading.Start ("Please wait..."); bool needHide = true; new System.Threading.Thread (() => { System.Threading.Thread.Sleep (10000); if (needHide) { MainPage.Loading.MouseUpEventHandler += (sd, dd) => { Application.RunOnMainThread (() => { MainPage.Loading.Hide (); needHide = false; }); }; } }) { IsBackground = true }.Start (); bool goNext = false; System.Threading.Tasks.Task.Run (() => { try { // goNext = CheckIfGoNext (common); if (goNext) { //先重置 goNext = false; //网关版本符合要求,继续判断是否绑定网关成功,绑定成功了才能进行下一步跳转设备搜索页面 goNext = CheckIfBindGatewaySuccess (common); } } catch (Exception ex) { Utlis.WriteLine (ex.Message); } finally { Application.RunOnMainThread (() => { MainPage.Loading.Hide (); needHide = false; if (goNext) { CommonPage.FindGatewayChilrenIPAddress = common.IPAddress; inThisView = false; if (inView != null) { Utlis.WriteLine ("inView != null"); //跳转设备搜索页面 var deviceListView = new GuideSettingGateway (common); (inView.Parent as PageLayout).AddChidren (deviceListView); deviceListView.ShowPage (); (inView.Parent as PageLayout).PageIndex = (inView.Parent as PageLayout).ChildrenCount - 1; } else { Utlis.WriteLine ("inView == null"); UserHomePage.FrameLayoutMain.AddChidren (UserMiddle.guidePageView); var guide = new GuideAddResidence (); UserMiddle.guidePageView.AddChidren (guide); guide.ShowHomeView (); UserMiddle.guidePageView.PageIndex = 0; //重置为加密模式 UserConfig.Instance.IsLocalEncrypt = true; } } }); } }); }; goNextRight.MouseUpEventHandler += eHandler; rightButton1.MouseUpEventHandler += eHandler; nameButton1.MouseUpEventHandler += (sender, e) => { ResetGatewayName (common, nameButton1); }; } } /// /// 检测是否绑定网关成功 /// /// static bool CheckIfBindGatewaySuccess (GatewayBase gatewayBase) { try { if (UserConfig.Instance.CheckHomeGatewaysNotEmpty ()) { //之前绑定过网关,并且和当前搜索到到网关一致,子网号设备号都要一致 if (UserConfig.Instance.HomeGateway.mac.ToUpper () == gatewayBase.MAC.Replace (".", "").ToUpper () && UserConfig.Instance.HomeGateway.subnetId == gatewayBase.SubnetID && UserConfig.Instance.HomeGateway.deviceId == gatewayBase.DeviceID ) { return true; } } var gatewayMAC = gatewayBase.MAC.Replace (".", ""); //重新绑定 var bindGatewayObj = new BindGatewayObj () { homeId = UserConfig.Instance.CurrentRegion.Id, subnetId = gatewayBase.SubnetID, deviceId = gatewayBase.DeviceID, gatewayType = GatewayType.BUSUDPGATEWAY.ToString (), mac = gatewayMAC }; var revertObj = HttpServerRequest.Current.BindGateway (bindGatewayObj); if (revertObj.Code == StateCode.SUCCESS) { var homeGatewayInfo = Newtonsoft.Json.JsonConvert.DeserializeObject (revertObj.Data.ToString ()); if (homeGatewayInfo != null && !string.IsNullOrEmpty (homeGatewayInfo.gatewayId)) { //绑定网关成功,并且成功获取到新绑定的gatewayId UserConfig.Instance.HomeGateway = homeGatewayInfo; UserConfig.Instance.SaveUserConfig (); return true; } } else { IMessageCommon.Current.ShowErrorInfoAlter (revertObj.Code); } } catch { Utlis.WriteLine ("绑定网关失败"); } return false; } static bool inThisView = false; //Alert checkInternetAlert = new Alert ("", "Your phone in not connected to WIFI network, please connet", "Close", "Search again"); //Alert confirmAlert = new Alert ("", "Please make sure gateway is powered up and comect to WiFi router.", "Close", "Search again"); //Alert confirmAlert1 = new Alert ("", "If not all the gateways are in the list,you can search again.", "Close", "Search again"); //Alert wrongPasswordAlert = new Alert ("", ErrorCode.GatewayPasswordError, "Close", "Search again"); void SearchGatewayList () { if (UserConfig.Instance.internetStatus == 0 || UserConfig.Instance.internetStatus == 1) { Alert checkInternetAlert = new Alert ("", ErrorCode.NotConnectedToWIFI, "Close", "Search again"); checkInternetAlert.Show (); checkInternetAlert.ResultEventHandler += (dsss, eee) => { if (eee) { SearchGatewayList (); } }; return; } CommonPage.FindGateway = true; new System.Threading.Thread (() => { try { Application.RunOnMainThread (() => { MainPage.Loading.Start ("Searching for gateway..."); }); #region 搜索设备 //是否需要加密检测、、为了适配多网关,搜索添加网关的时候需要关掉加密检测,然后同时发送密文,明文搜索网关 2023-01-06 16:49:30 CommonPage.needEncryptionDetection = false; ////2020-01-14 默认明文开始搜索 UserConfig.Instance.IsLocalEncrypt = false; UserConfig.Instance.EncryptedPasswordCorrect = true; CommonPage.LocalPhoneFindDevice = true; CommonPage.RandomHigh = (byte)new Random ().Next (255); CommonPage.RandomLow = (byte)new Random ().Next (255); CommonPage.GateWayList.Clear (); CommonPage.FindGateway = true; //如果两次都没有数据反馈,就不读取 int readCount = 3; while (0 < readCount) { readCount--; System.IO.MemoryStream ms = new System.IO.MemoryStream (); ms.WriteByte (CommonPage.RandomHigh); ms.WriteByte (CommonPage.RandomLow); List list = CommonPage.GateWayList; int tempCount = list.Count; string s = ";"; for (int i = 0; i < list.Count; i++) { Common common = list [i]; if (s.Contains (";" + common.SubnetID.ToString () + ":" + common.DeviceID.ToString ())) continue; s += common.SubnetID.ToString () + ":" + common.DeviceID.ToString () + ";"; ms.WriteByte (common.SubnetID); ms.WriteByte (common.DeviceID); } Control control = new Control (); Utlis.WriteLine ("组播搜索网关,搜索地址是:" + CommonPage.EndPoint.ToString () + " " + CommonPage.GateWayList.Count); control.Send (new Target () { IPEndPoint = CommonPage.EndPoint, Command = Command.ReadGateway, SubnetID = 0xFF, DeviceID = 0xFF, AddData = ms.ToArray () }, SendCount.Zero, false); Utlis.WriteLine ("广播搜索网关,搜索地址是:" + new Net.NetWiFi ().BroadcastIpAddress.ToString () + " " + CommonPage.GateWayList.Count); control.Send (new Target () { IPEndPoint = new System.Net.IPEndPoint (new Net.NetWiFi ().BroadcastIpAddress, 6000), Command = Command.ReadGateway, SubnetID = 0xFF, DeviceID = 0xFF, AddData = ms.ToArray () }, SendCount.Zero, false); System.Threading.Thread.Sleep (800); //如果数量不相等,就重置次数 if (tempCount != CommonPage.GateWayList.Count) { readCount = 3; } } //2023-01-06 16:33:09 增加同时发送密文搜索 CommonPage.needEncryptionDetection = true; UserConfig.Instance.IsLocalEncrypt = true; readCount = 3; while (0 < readCount) { readCount--; System.IO.MemoryStream ms = new System.IO.MemoryStream (); ms.WriteByte (CommonPage.RandomHigh); ms.WriteByte (CommonPage.RandomLow); List list = CommonPage.GateWayList; int tempCount = list.Count; string s = ";"; for (int i = 0; i < list.Count; i++) { Common common = list [i]; if (s.Contains (";" + common.SubnetID.ToString () + ":" + common.DeviceID.ToString ())) continue; s += common.SubnetID.ToString () + ":" + common.DeviceID.ToString () + ";"; ms.WriteByte (common.SubnetID); ms.WriteByte (common.DeviceID); } Control control = new Control (); Utlis.WriteLine ("组播搜索网关,搜索地址是:" + CommonPage.EndPoint.ToString () + " " + CommonPage.GateWayList.Count); control.Send (new Target () { IPEndPoint = CommonPage.EndPoint, Command = Command.ReadGateway, SubnetID = 0xFF, DeviceID = 0xFF, AddData = ms.ToArray () }, SendCount.Zero, false); Utlis.WriteLine ("广播搜索网关,搜索地址是:" + new Net.NetWiFi ().BroadcastIpAddress.ToString () + " " + CommonPage.GateWayList.Count); control.Send (new Target () { IPEndPoint = new System.Net.IPEndPoint (new Net.NetWiFi ().BroadcastIpAddress, 6000), Command = Command.ReadGateway, SubnetID = 0xFF, DeviceID = 0xFF, AddData = ms.ToArray () }, SendCount.Zero, false); System.Threading.Thread.Sleep (800); //如果数量不相等,就重置次数 if (tempCount != CommonPage.GateWayList.Count) { readCount = 3; } } CommonPage.FindGateway = false; CommonPage.LocalPhoneFindDevice = false; #endregion } catch (Exception ex) { Utlis.WriteLine (ex.ToString ()); } finally { Application.RunOnMainThread (() => { if (CommonPage.GateWayList.Count == 0) { MainPage.Loading.Hide (); if (this != null && this.Parent != null) { ShowConfirmAlert (); } } else { if (this != null && this.Parent != null) { if (inThisView) {// this.Parent.GetChildren (this.Parent.ChildrenCount - 1) == this) { Alert confirmAlert1 = new Alert ("", ErrorCode.IfAllTheGatewaysAreNotInTheList, "Close", "Search again"); confirmAlert1.Show (); confirmAlert1.ResultEventHandler += (ddf, ddd) => { MainPage.Loading.Hide (); if (ddd) { SearchGatewayList (); } }; } } } }); } }) { IsBackground = true }.Start (); } /// /// 提示 /// Please make sure gateway is powered up and comect to WiFi router. /// 或者 /// /// static void ShowConfirmAlert () { if (UserConfig.Instance.IsLocalEncrypt) { //密码检验正确 if (UserConfig.Instance.EncryptedPasswordCorrect) { Alert confirmAlert = new Alert ("", ErrorCode.MakeSureGatewayIsPoweredUp, "Close", "Search again"); confirmAlert.Show (); confirmAlert.ResultEventHandler += (ddf, ddd) => { MainPage.Loading.Hide (); if (ddd) { inView.SearchGatewayList (); } }; } else { Alert wrongPasswordAlert = new Alert ("", ErrorCode.GatewayPasswordError, "Close", "Search again"); wrongPasswordAlert.Show (); wrongPasswordAlert.ResultEventHandler += (ddf, ddd) => { MainPage.Loading.Hide (); if (ddd) { inView.SearchGatewayList (); } }; } } else { Alert confirmAlert = new Alert ("", ErrorCode.MakeSureGatewayIsPoweredUp, "Close", "Search again"); confirmAlert.Show (); confirmAlert.ResultEventHandler += (ddf, ddd) => { MainPage.Loading.Hide (); if (ddd) { inView.SearchGatewayList (); } }; } } //static byte [] AseKeyBytes; /// /// 修改网关本地加密 /// /// /// /// static bool SetGateWayLocalEncryption (GatewayBase gatewayDeicve, bool isEncrypt = true) { if (UserConfig.Instance.CurrentRegion == null) return false; byte [] AseKeyBytes = UserConfig.Instance.GenerateLocalEncryptionKey (); byte [] sendBytes = new byte [17]; sendBytes [0] = isEncrypt ? (byte)1 : (byte)0; //0:不加密 1:加密 Array.Copy (AseKeyBytes, 0, sendBytes, 1, 16); byte [] backBytes = Control.ControlBytesSendHasReturn (Command.SetGateWayLocalEncryption, gatewayDeicve.SubnetID, gatewayDeicve.DeviceID, sendBytes); return CheckIsSuccessfulWithBytes (backBytes); } /// /// 判断是否修复成功 F8 = 成功; F5=失败 /// /// /// static bool CheckIsSuccessfulWithBytes (byte [] backBytes, string errorStr = "Modify gateway configuration failed,please try again!") { if (backBytes == null) { Application.RunOnMainThread (() => { new Alert ("", ErrorCode.GatewayNoResponse, Language.StringByID (R.MyInternationalizationString.Close)).Show (); }); return false; } else if (backBytes [0] == 0xF8) {//F8 = 成功; F5=失败 return true; } else { Application.RunOnMainThread (() => { new Alert ("", errorStr, Language.StringByID (R.MyInternationalizationString.Close)).Show (); }); return false; } } /// /// CheckIfGoNext /// /// static bool CheckIfGoNext (GatewayBase common) { bool goNext = false; if (common.Type == DeviceType.OnePortWirelessFR || common.Type == DeviceType.OnePortMqttFR) { goNext = CheckIfGoNextMqttGateway (common); } else { goNext = true; } return goNext; } /// /// CheckIfGoNextMqttGateway /// /// static bool CheckIfGoNextMqttGateway (GatewayBase common) { Application.RunOnMainThread (() => { MainPage.Loading.Start ("Please wait..."); }); bool goNext = false; //if (!UserConfig.Instance.IsLocalEncrypt) { // //如果没加密,走修改加密方法 // var result = SetGateWayLocalEncryption (common); // if (!result) { // MainPage.LoadingHide (); // return result;//修改失败 返回goNext false // } // //修改成功,设置本地为加密方式 // UserConfig.Instance.IsLocalEncrypt = true; // //string aseKeyStr = CommonPage.MyEncodingUTF8.GetString (AseKeyBytes); // //UserConfig.Instance.LocalEncryptKey = aseKeyStr; // Utlis.WriteLine ($"============>LocalEncryptKey 加密成功Key为:{UserConfig.Instance.LocalEncryptKey}"); //} UserConfig.Instance.IsLocalEncrypt = false; var backBytes = Control.ControlBytesSendHasReturn (Command.Read_APP_Data_STORE_1D5C_CMD, common.SubnetID, common.DeviceID, new byte [] { }); if (backBytes == null) { Application.RunOnMainThread (() => { new Alert ("", "No response from gateway. Please make sure the gateway is online and its firmware is up to date.", Language.StringByID (R.MyInternationalizationString.Close)).Show (); }); return false; } if (backBytes.Length >= 37) { //******************住宅ID string类型************* bool enable = backBytes [0] == 0 ? false : true; //返回住宅ID 转为string类型 string backIDStr = CommonPage.MyEncodingGB2312.GetString (backBytes, 1, 36).Trim ('\0'); backIDStr = backIDStr.Replace ("ÿ", ""); //2020-01-12 backIDStr = backIDStr.Replace ("\0", ""); if (enable || backIDStr == UserConfig.Instance.CurrentRegion.Id || string.IsNullOrEmpty (backIDStr)) { if (!UserConfig.Instance.IsLocalEncrypt || true) {//不管加没加密,都重新加密一次,防止多网关的时候有从网关没加密 2022-12-26 13:42:09 //如果没加密,走修改加密方法 var result = SetGateWayLocalEncryption (common); if (!result) { Application.RunOnMainThread (() => { MainPage.Loading.Hide (); new Alert ("", "Encryption gateway failed, please try again.", Language.StringByID (R.MyInternationalizationString.Close)).Show (); }); return result;//修改失败 返回goNext false } //修改成功,设置本地为加密方式 UserConfig.Instance.IsLocalEncrypt = true; //Utlis.WriteLine ($"============>LocalEncryptKey 加密成功Key为:{UserConfig.Instance.LocalEncryptKey}"); } goNext = true; } else { UnableToBindGatewayAlertShow (); } } else { Application.RunOnMainThread (() => { new Alert ("", ErrorCode.GatewayVersionLow, Language.StringByID (R.MyInternationalizationString.Close)).Show (); }); } MainPage.LoadingHide (); return goNext; } static void UnableToBindGatewayAlertShow () { if (inView == null) return; Application.RunOnMainThread (() => { //if (this != null && this.Parent != null) { var alter = new Alert ("", ErrorCode.UnableToBindGateway, Language.StringByID (R.MyInternationalizationString.Close)); alter.ResultEventHandler += (sender1, e1) => { if (e1) { if (inView == null) return; //重置为加密模式 UserConfig.Instance.IsLocalEncrypt = true; (inView.Parent as PageLayout).PageIndex -= 1; } }; alter.Show (); //} }); } } }