HDL_ON/HDL_ON.projitems | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/AddDevciePage.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPageBLL.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HDL_ON/UI/UI2/FuntionControlView/Video/View/ShowDialog.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/CommonMethod.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/ObjectClass.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/StackTraceLog.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideDoorLockSend.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorLockPage.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
HDL_ON/HDL_ON.projitems
@@ -533,6 +533,7 @@ <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\VideoDoorLock\CommonMethod.cs" /> <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\VideoDoorLock\ObjectClass.cs" /> <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\VideoDoorLock\VideDoorLockSend.cs" /> <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\VideoDoorLock\StackTraceLog.cs" /> </ItemGroup> <ItemGroup> <Folder Include="$(MSBuildThisFileDirectory)Entity\Device\" /> HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/AddDevciePage.cs
@@ -182,7 +182,7 @@ break; case SPK.VideoDoorLock: { //跳转到android那边去 HDL_ON.UI.UI2.FuntionControlView.VideoDoorLock.CommonMethod.Current.SkipAddDeviceActivity(); HDL_ON.UI.UI2.FuntionControlView.VideoDoorLock.CommonMethod.Current.SkipAddDeviceActivity("K36229010"); } break; } HDL_ON/UI/UI2/4-PersonalCenter/PersonalCenterPageBLL.cs
@@ -415,6 +415,7 @@ dialog.Close(); LoadEvent_ChangeCurHome(home); LoadContentView(); HDL_ON.UI.UI2.FuntionControlView.VideoDoorLock.CommonMethod.Current.ChangeCurrHome(home); }; } HDL_ON/UI/UI2/FuntionControlView/Video/View/ShowDialog.cs
@@ -36,6 +36,7 @@ { if (dialog != null) { //防止二重界面 dialog.Close(); } dialog = new Dialog() HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/CommonMethod.cs
@@ -5,12 +5,12 @@ namespace HDL_ON.UI.UI2.FuntionControlView.VideoDoorLock { /// <summary> /// 萤石视频门锁公共方法类 /// </summary> public class CommonMethod { public CommonMethod() { } private Loading loading; private static CommonMethod commonMethod = null; public static CommonMethod Current @@ -27,11 +27,28 @@ } } #region --------- 跳转到Android那边的方法(萤石视频门锁) -------- /// <summary> /// 跳转到Android那边去 /// 添加设备到云端 /// <paramref name="devSerial"/>设备序列号</param> /// </summary> public void SkipAddDeviceActivity( ) public void SkipAddDeviceActivity(string devSerial) { if (string.IsNullOrEmpty(devSerial)) return; new System.Threading.Thread(() => { var list = VideDoorLockSend.Current.GetVideoDoorLockDeviceList(SPK.VideoDoorLock); if (list.Count > 0) { var function = list.Find((o) => o.sid == devSerial); if (function != null) { this.SaveFunctionFile(function); } } }) { IsBackground = true }.Start(); //未实现 #if __IOS__ @@ -40,9 +57,8 @@ #endif } /// <summary> /// 跳转到Android(实时视频)那边去 /// 打开实时视频画面 /// </summary> /// <param name="deviceSerial">设备序列号</param> /// <param name="deviceId">设备id(云端上deviceId)</param> @@ -62,21 +78,121 @@ //jumpToEZRealPlayActivity(Shared.Application.Activity, deviceId, deviceSerial, spk) } /// <summary> /// 跳转到Android(历史记录)那边去 /// 浏览历史记录 /// </summary> public void SkipRecordActivity() { //未实现 //this.InitializationAndroidData(); // } /// <summary> /// 跳转到Android(临时密码)那边去 /// 临时密码开门 /// </summary> public void SkipPSWActivity() { //jumpTempPasswordActivity(Application.Activity, deviceId); } /// <summary> /// 初始化萤石SDK(实际就是传参数,多次调用也没有影响) /// </summary> public void InitializationAndroidData(Action<bool> action) { bool isBool = true; this.SunThread(() => { try { //先获取萤石云子账号token var ezChildAccessToken = VideDoorLockSend.Current.GetEZGetChildToken(); this.MainThread(() => { if (string.IsNullOrEmpty(ezChildAccessToken)) { //Token isBool = false; return; } Application.RunOnMainThread(() => { #if __IOS__ //iOS //初始化萤石云SDK,中文国内key、英文海外key 开发者账号使用应用包名申请的APPKEY,不同包名应用需配置不同的APPKEY EZSDK.IOS.EZSDK.SharedInstance().InitLibWithAppKey("1aa98a90489b4838b966b57018b4b04b", "1aa98a90489b4838b966b57018b4b04b"); //1.设置所需河东的AccessToken和RefreshToken、域名地址 EZSDK.IOS.EZSDK.SharedInstance().SetHDlAccessToken(UserVideoDoorLockInfo.Current.LoginTokenString, UserVideoDoorLockInfo.Current.RefreshToken); EZSDK.IOS.EZSDK.SharedInstance().SetRequestHttpsHostAndPlatform(OnAppConfig.Instance.RequestHttpsHost, 1, DB_ResidenceData.Instance.CurrentRegion.id); //2.设置萤石子账号的AccessToken到SDK EZSDK.IOS.EZSDK.SharedInstance().SetEZAccessToken(ezChildAccessToken); ////3.打开摄像头设备列表页面 EZSDK.IOS.EZSDK.SharedInstance().Go2EZvizMonitor(); //EZSDK.IOS.EZDeviceInfo info = new EZSDK.IOS.EZDeviceInfo(); //info.de //EZSDK.IOS.EZSDK.Play(info); #else //Android //1.设置所需河东的token、域名地址 //2.设置萤石子账号的token //3.打开摄像头设备列表页面 ((BaseActivity)Shared.Application.Activity).SetCamera(b => { if (b) { ((BaseActivity)Shared.Application.Activity).SetPermission(result => { if (result) { Android.Content.Intent intent = new Android.Content.Intent(); var bundle = new Android.OS.Bundle(); //传递name参数为tinyphp bundle.PutString("EzChildAccessToken", ezChildAccessToken); bundle.PutString("HdlToken", UserInfo.Current.LoginTokenString); bundle.PutString("HdlrefreshToken", UserInfo.Current.RefreshToken); bundle.PutString("Url", OnAppConfig.Instance.RequestHttpsHost); bundle.PutString("EzvizAppKey", "1aa98a90489b4838b966b57018b4b04b"); bundle.PutInt("Platform", 1); bundle.PutString("HomeId", DB_ResidenceData.Instance.CurrentRegion.id); intent.PutExtras(bundle); //intent.SetComponent(new Android.Content.ComponentName(Shared.Application.Activity, "com.videogo.MainActivity")); //Shared.Application.Activity.StartActivity(intent); } }, "android.permission.RECORD_AUDIO"); } }); #endif }); }); } catch (Exception e) { } finally { this.MainThread(() => { action?.Invoke(isBool); }); } }); } /// <summary> /// 更换住宅 /// </summary> /// <param name="home">对象</param> public void ChangeCurrHome(RegionInfoRes home) { if (DB_ResidenceData.Instance.CurrentRegion.id == home.id || string.IsNullOrEmpty(home.id)) return; } #endregion /// <summary> /// 萤石视频门锁的图标 /// <param name="comerom">来自那里</param> /// </summary> public string GetVideoDoorLockIcon(Comerom comerom) { @@ -90,6 +206,7 @@ } } #region --------- 功能文件保存,删除 -------- /// <summary> /// 保存本地文件 /// </summary> @@ -113,47 +230,35 @@ FunctionList.List.DeleteFunction(function); MainPage.Log($"文件删除->{function.name}-->{function.spk}"); } #endregion /// <summary> /// 闪烁框 /// 获取Loading对象 /// </summary> /// <param name="frame">父视图</param> /// <param name="tipText">提示文本</param> /// <param name="closeTime">显示时间,默认是1s</param> public void ShowTip(FrameLayout frame, string tipText, int closeTime = 1) /// <returns></returns> public Loading Loading { Application.RunOnMainThread(() => get { new Tip() if (loading == null) { CloseTime = closeTime, Text = tipText, Direction = AMPopTipDirection.None, }.Show(frame); }); } loading = new Loading(); } if (MainPage.BasePageView.ChildrenCount < 1) { return loading; } View view = MainPage.BasePageView.GetChildren(MainPage.BasePageView.ChildrenCount - 1); if (view is FrameLayout) { ((FrameLayout)view).AddChidren(loading); } else if (view is PageLayout) { ((PageLayout)view).AddChidren(loading); } return loading; } /// <summary> /// 信息提示窗口,自动关闭 /// </summary> /// <param name="msg">提示错误文本</param> public void ShowTip(string msg, int time = 2) { Application.RunOnMainThread(() => { new PublicAssmebly().TipMsgAutoClose(msg, false, time * 1000); }); } /// <summary> /// 对话框 /// </summary> public void ShowAlert() { Application.RunOnMainThread(() => { new Alert("", "视频门锁一", "取消", "确定").Show(); }); } /// <summary> /// 获取萤石视频门锁列表 @@ -168,7 +273,90 @@ #endif return list; } #region ---------自定义线程(子线程,主线程)-------- /// <summary> /// 子线程 /// </summary> /// <paramref name="tipType"/>是否要提示错误信息(默认显示)<paramref> /// <param name="action"></param> public void SunThread(Action action, TipType tipType = TipType.confirmation) { new System.Threading.Thread(() => { try { action?.Invoke(); } catch (Exception e) { this.ShowAlert(e, tipType); } }) { IsBackground = true }.Start(); } /// <summary> /// 主线程(UI更新) /// </summary> /// <paramref name="tipType"/>是否要提示错误信息(默认显示)<paramref> /// <param name="action"></param> public void MainThread(Action action, TipType tipType = TipType.confirmation) { Application.RunOnMainThread(() => { try { action?.Invoke(); } catch (Exception e) { this.ShowAlert(e, tipType); } }); } #endregion #region --------- 提示框,确认框 -------- /// <summary> /// 对话框(只要程序报错的时候才用到) /// </summary> /// <paramref name="e"/>异常对象<paramref> /// <paramref name="tipType"/>是否要提示错误信息(默认显示)<paramref> private void ShowAlert(Exception e, TipType tipType) { if (tipType != TipType.confirmation) { return; } Application.RunOnMainThread(() => { string msg = e.Message + "\r\n" + e.StackTrace; Alert alert = new Alert("抱歉程序出错了.", "按\"确定\"能获取更详细的错误信息.", "取消", "确定"); alert.Show(); alert.ResultEventHandler += (alerts, isBool) => { alert.Dismiss(); if (isBool) { StackTraceLog stackTraceLog = new StackTraceLog(msg); stackTraceLog.Show(); } }; }); } /// <summary> /// 信息提示窗口,自动关闭 /// </summary> /// <param name="msg">提示错误文本</param> public void ShowTip(string msg, int time = 2) { Application.RunOnMainThread(() => { new PublicAssmebly().TipMsgAutoClose(msg, false, time * 1000); }); } #endregion /// <summary> /// 弹框类型 /// </summary> @@ -186,6 +374,7 @@ function,//功能 collect,//收藏 room,//房间 push,//推送 } } } HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/ObjectClass.cs
@@ -7,9 +7,9 @@ } /// <summary> /// 用户信息(萤石视频门锁) /// 用户信息(萤石视频门锁) /// </summary> public class UserInfo public class UserVideoDoorLockInfo { /// <summary> /// 用户id HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/StackTraceLog.cs
New file @@ -0,0 +1,58 @@ using System; using HDL_ON.UI.CSS; using HDL_ON.UI.Music; using Shared; namespace HDL_ON.UI.UI2.FuntionControlView.VideoDoorLock { public class StackTraceLog { /// <summary> /// 堆叠跟踪日志 /// </summary> public string msg; public StackTraceLog(string msg) { this.msg = msg; } public void Show() { Dialog dialog = new Dialog() { BackgroundColor = CSS_Color.textWhiteColor, }; dialog.Show(); TopView topView = new TopView(); topView.topNameBtn.Text="错误日志信息"; dialog.AddChidren(topView.TopFLayoutView()); topView.clickBackBtn.MouseUpEventHandler += (sen, e) => { dialog.Close(); }; var middleFl = new FrameLayout { Y = topView.fLayout.Bottom, Height = Application.GetRealHeight(H_W.H - H_W.T_Height), }; dialog.AddChidren(middleFl); Button btnLogText = new Button { //TextSize = TextSize.Text14, TextColor = MusicColor.Text18Color, Width = Application.GetRealWidth(H_W.W - 16 - 16), Height = middleFl.Height, X = Application.GetRealWidth(16), Text = this.msg, TextAlignment = TextAlignment.TopLeft, IsMoreLines = true, }; middleFl.AddChidren(btnLogText); } } } HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideDoorLockSend.cs
@@ -36,7 +36,8 @@ /// </summary> /// <param name="function">当前的设备</param> /// <param name="action">回调结果</param> public void DelDevice(Function function, Action<bool> action) /// <param name="tipType">是否需要提示,默认提示</param> public void DelDevice(Function function, Action<bool> action, TipType tipType = TipType.flicker) { new Thread(() => { @@ -47,7 +48,7 @@ d.Add("deviceSerial", function.sid);//等同门锁序列号 d.Add("platform", 1);//平台 var responsePackNew = UI.Music.SendMethod.Current.RequestServerhomeId(d, NewAPI.Api_Post_DeleteDevice, "删除萤石门锁设备"); if (!this.DataChecking(responsePackNew)) if (!this.DataChecking(responsePackNew, tipType)) { return; } @@ -68,6 +69,7 @@ /// 获取门锁状态(萤石视频门锁) /// </summary> /// <param name="function">当前的设备</param> /// <param name="tipType">是否需要提示,默认提示</param> /// <param name="return">返回结果不会为null</param> public VideoDoorLockInfo GetVideoDoorLockState(Function function, TipType tipType = TipType.flicker) { @@ -76,7 +78,7 @@ d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id); d.Add("deviceId", function.deviceId); var responsePackNew = UI.Music.SendMethod.Current.RequestServerhomeId(d, NewAPI.Api_Post_Lockstatus, "获取萤石视频门锁状态"); if (!this.DataChecking(responsePackNew)) if (!this.DataChecking(responsePackNew,tipType)) { return new VideoDoorLockInfo(); } @@ -95,6 +97,7 @@ /// 获取电池电量(萤石视频门锁) /// </summary> /// <param name="function">当前的设备</param> /// <param name="tipType">是否需要提示,默认提示</param> /// <param name="return">返回结果不会为null</param> public CellInfo GetCellValue(Function function, TipType tipType = TipType.flicker) { @@ -102,7 +105,7 @@ d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id); d.Add("deviceId", function.deviceId); var responsePackNew = UI.Music.SendMethod.Current.RequestServerhomeId(d, NewAPI.Api_Post_Details, "获取萤石门锁设备电量"); if (!this.DataChecking(responsePackNew)) if (!this.DataChecking(responsePackNew,tipType)) { return new CellInfo(); } @@ -119,21 +122,22 @@ /// 获取门锁用户列表(萤石视频门锁) /// </summary> /// <param name="function">当前的设备</param> /// /// <param name="return">返回结果不会为null</param> public List<UserInfo> GetVideoDoorLockUserListInfo(Function function, TipType tipType = TipType.flicker) /// <param name="tipType">是否需要提示,默认提示</param> /// <param name="return">返回结果不会为null</param> public List<UserVideoDoorLockInfo> GetVideoDoorLockUserListInfo(Function function, TipType tipType = TipType.flicker) { Dictionary<string, object> d = new Dictionary<string, object>(); d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id); d.Add("deviceId", function.deviceId); var responsePackNew = UI.Music.SendMethod.Current.RequestServerhomeId(d, NewAPI.Api_Post_UserList, "获取萤石门锁用户列表"); if (!this.DataChecking(responsePackNew)) if (!this.DataChecking(responsePackNew, tipType)) { return new List<UserInfo>(); return new List<UserVideoDoorLockInfo>(); } var list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<UserInfo>>(responsePackNew.Data.ToString()); var list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<UserVideoDoorLockInfo>>(responsePackNew.Data.ToString()); if (list == null) { return new List<UserInfo>(); return new List<UserVideoDoorLockInfo>(); } return list; } @@ -141,15 +145,16 @@ /// 获取门锁设备列表(萤石视频门锁) /// </summary> /// <param name="spk">指定spk获取</param> /// <returns></returns> public List<Function> GetVideoDoorLockDeviceList(string spk) /// <param name="tipType">是否需要提示,默认提示</param> /// <returns>返回结果不会为null</returns> public List<Function> GetVideoDoorLockDeviceList(string spk, TipType tipType = TipType.flicker) { Dictionary<string, object> d = new Dictionary<string, object>(); d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id); d.Add("spk", spk); var responsePackNew = UI.Music.SendMethod.Current.RequestServerhomeId(d, NewAPI.Api_Post_UserList, "获取萤石门锁设备列表"); if (!this.DataChecking(responsePackNew)) if (!this.DataChecking(responsePackNew, tipType)) { return new List<Function>(); } @@ -161,12 +166,26 @@ return list; } /// <summary> /// 先获取萤石云子账号token /// </summary> /// <param name="tipType">是否需要提示,默认提示</param> public string GetEZGetChildToken(TipType tipType = TipType.flicker) { //先获取萤石云子账号token var responsePackNew = new HttpServerRequest().EZGetChildToken(); if (!this.DataChecking(responsePackNew, tipType)) { return ""; } return responsePackNew.Data.ToString(); } /// <summary> /// 检验数据回复成功或者失败 /// </summary> /// <param name="responsePackNew">回复数据对象</param> /// <param name="tipType">是否需要提示,默认提示</param> /// <param name="tipType">是否需要提示</param> /// <returns></returns> private bool DataChecking(ResponsePackNew responsePackNew, TipType tipType = TipType.flicker) private bool DataChecking(ResponsePackNew responsePackNew, TipType tipType) { if (responsePackNew.Data == null || responsePackNew.Code != "0" || responsePackNew.Data.ToString() == "") { @@ -175,14 +194,17 @@ if (responsePackNew == null) { responsePackNew = new ResponsePackNew { message = "没回复,请确认网络是否正常.", Code = "-1", }; } //new Tip() //{ // CloseTime = 1, // Text = responsePackNew.message + "(" + responsePackNew.Code + ")", // Direction = AMPopTipDirection.None, //}.Show(MainPage.BasePageView.GetChildren(MainPage.BasePageView.ChildrenCount - 1)); Application.RunOnMainThread(() => { //new Tip() //{ // CloseTime = 1, // Text = responsePackNew.message + "(" + responsePackNew.Code + ")", // Direction = AMPopTipDirection.None, //}.Show(MainPage.BasePageView.GetChildren(MainPage.BasePageView.ChildrenCount - 1)); CommonMethod.Current.ShowTip(responsePackNew.message + "(" + responsePackNew.Code + ")"); }); } return false; } HDL_ON/UI/UI2/FuntionControlView/VideoDoorLock/VideoDoorLockPage.cs
@@ -76,7 +76,7 @@ /// <summary> /// 表示来自那个界面 /// </summary> private UI2.FuntionControlView.VideoDoorLock.CommonMethod.Comerom Comerom; private CommonMethod.Comerom comerom; /// <summary> /// 删除设备后需要更新界面的回调 /// </summary> @@ -90,12 +90,12 @@ /// <param name="function">设备</param> /// <param name="btnDeviceName">上一级界面的设备名字控件</param> /// <param name="btnRoomName">上一级界面的房间名字控件</param> public VideoDoorLockPage(Function function, Button btnDeviceName, Button btnRoomName, UI2.FuntionControlView.VideoDoorLock.CommonMethod.Comerom comerom, Action action) public VideoDoorLockPage(Function function, Button btnDeviceName, Button btnRoomName, CommonMethod.Comerom comerom, Action action) { this.device = function; this.btnDeviceName = btnDeviceName; this.btnRoomName = btnRoomName; this.Comerom = comerom; this.comerom = comerom; this.action = action; } @@ -108,8 +108,6 @@ this.EventListener(); //读取数据 this.ReadData(); } @@ -277,8 +275,6 @@ this.topView.clickBackBtn.MouseUpEventHandler += (sender, e) => { RemoveFromParent(); }; //设置 this.topView.clickSetBtn.MouseUpEventHandler += (sender, e) => @@ -336,16 +332,14 @@ /// </summary> private void ReadData() { Loading loading = new Loading(); this.AddChidren(loading); loading.Start(); new System.Threading.Thread(() => CommonMethod.Current.Loading.Start(); CommonMethod.Current.SunThread(() => { try { var videoDoorLockInfo = UI2.FuntionControlView.VideoDoorLock.VideDoorLockSend.Current.GetVideoDoorLockState(this.device); var cellInfo = UI2.FuntionControlView.VideoDoorLock.VideDoorLockSend.Current.GetCellValue(this.device); Application.RunOnMainThread(() => var videoDoorLockInfo = VideDoorLockSend.Current.GetVideoDoorLockState(this.device); var cellInfo = VideDoorLockSend.Current.GetCellValue(this.device); CommonMethod.Current.MainThread(() => { //this.cellDiyArcSeekBar.Progress = i; //更新电量值 @@ -358,11 +352,10 @@ { Application.RunOnMainThread(() => { loading.Hide(); CommonMethod.Current.Loading.Hide(); }); } }) { IsBackground = true }.Start(); }); } /// <summary>