From f71e74b5f0d2716fbf05da016cdaa18d64e09f80 Mon Sep 17 00:00:00 2001 From: xm <1271024303@qq.com> Date: 星期四, 31 十二月 2020 17:01:18 +0800 Subject: [PATCH] 又换完成最新门锁。空气质量传感器完成数据和基本配置功能。开发图表和自动化的同事可下载此代码 --- ZigbeeApp/GateWay.Droid/VideoActivity.cs | 390 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 390 insertions(+), 0 deletions(-) diff --git a/ZigbeeApp/GateWay.Droid/VideoActivity.cs b/ZigbeeApp/GateWay.Droid/VideoActivity.cs new file mode 100755 index 0000000..acf8255 --- /dev/null +++ b/ZigbeeApp/GateWay.Droid/VideoActivity.cs @@ -0,0 +1,390 @@ +锘縰sing System; +using Android.App; +using Android.Content.PM; +using System.Threading; +using Android.Content.Res; +using Android.Graphics; +using Android.OS; +using Android.Runtime; +using Android.Views; +using Android.Widget; +using Com.ETouchSky; +using Com.Tool; +using GateWay.Droid.FengLinVideo.Forms; +using GateWay.Droid.FengLinVideo.widget; +using Java.Text; +using Java.Util; + +namespace GateWay.Droid +{ + //娉ㄦ剰锛� com.hdl.evoyohome ====銆媝ackcode=44492e5c51dda5e40862a4255396b741 鍖呭悕鏄浐瀹氱殑锛屾洿鏀瑰寘鍚嶄細瀵艰嚧鍙瀵硅閮ㄥ垎宸ヤ綔涓嶆甯� + [Activity(Name = "com.hdl.home.wxapi.VideoActivity", WindowSoftInputMode = SoftInput.AdjustResize, LaunchMode = LaunchMode.SingleInstance, ConfigurationChanges = (ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden | ConfigChanges.LayoutDirection | ConfigChanges.Locale | ConfigChanges.Orientation | ConfigChanges.ScreenSize), Theme = "@style/MyTheme", ScreenOrientation = ScreenOrientation.Portrait)] + public class VideoActivity : Android.App.Activity, View.IOnClickListener, ISurfaceHolderCallback, VideoPhoneJni.ICallBack,TipDiaglog.OnConfirmClickListener + { + private static Activity activity; + private VideoPhone mPhone; + private ISurfaceHolder mRemoteSurfaceHolder; + private FrameLayout mRemoteFrameContainer; + private SurfaceView mSurfaceRemote; + + private ImageView ivBack; + private TextView tvName; + private TextView tvRoomName; + private MonitorFragment monitorFragment = null; + private ReverseCallFragment reverseCallFragment = null; + + public string ESVideoUUID= "JJY000019VPLLF";//瀹ゅ鏈篣UID锛屼緥:JJY000007FSEYX f5f6fa + public int ESRoomID = 0;//褰撳墠鐢ㄦ埛鐨勬埧闂� ID + public string DeviceName;//瀹ゅ鏈虹殑鍚嶇О锛屼緥锛屽澶栨満 + public string RoomName;//鎴块棿鍛藉悕锛屼緥 8鏍�1鍗曞厓0801 + public bool IsCollect;//鏄惁鏀惰棌 + public int Tpye = 0;//绫诲瀷锛�0 鐩戞帶锛�1鍙嶅懠 + + protected override void OnCreate(Bundle savedInstanceState) + { + base.OnCreate(savedInstanceState); + + try + { + activity = this; + ESVideoUUID = Intent.GetStringExtra("ESVideoUUID");//瀹ゅ鏈篣UID锛屼緥:JJY000007FSEYX + ESRoomID = Intent.GetIntExtra("ESRoomID", 0);//褰撳墠鐢ㄦ埛鐨勬埧闂� ID 101 + DeviceName = Intent.GetStringExtra("DeviceName");//瀹ゅ鏈虹殑鍚嶇О锛屼緥锛屽澶栨満 + RoomName = Intent.GetStringExtra("RoomName");//鎴块棿鍛藉悕锛屼緥 8鏍�1鍗曞厓0801 81 + IsCollect = Intent.GetBooleanExtra("IsCollect", false);//鏄惁鏀惰棌 + Tpye = Intent.GetIntExtra("Type", 0);//绫诲瀷锛�0 鐩戞帶锛�1鍙嶅懠 + SetContentView(Resource.Layout.activity_video_phone); + + IniView(); + IniData(); + + if (Tpye == 0) + { + Monitor(ESVideoUUID); //鐩戞帶 + + monitorFragment = new MonitorFragment(mPhone); + FragmentManager.BeginTransaction().Replace(Resource.Id.content, monitorFragment).Commit(); + } + else + { + string param = "address=" + ESVideoUUID + ",tag=mobile://123,"; + reverseCallFragment = new ReverseCallFragment(mPhone, param); + FragmentManager.BeginTransaction().Replace(Resource.Id.content, reverseCallFragment).Commit(); + } + } + catch (Exception E) + { + var D=E.Message; + } + } + + //鐩戞帶 + private void Monitor(string address) + { + //鐩戣鍔熻兘 浠庡钩鍙版媺鍙栫洃瑙嗗垪琛紝璋冪敤姝ゆ帴鍙e彲浠ヤ竴鍙颁竴鍙扮洃瑙� + if (mPhone != null) + { + string UserData = ""; //姝ゅ弬鏁� 鍙互鍚戦棬鍙f満璁惧浼犻�掓暟鎹紝 + //娉ㄦ剰锛歊equestAudio 璇锋眰瀵规柟闊抽锛孯equestVideo璇锋眰瀵规柟瑙嗛 SendAudio鍙戦�佹湰鍦伴煶棰� SendVideo 鍙戦�佹湰鍦拌棰� 涓�鑸棬鍙d笉鎺ユ敹鍒拌棰戯紝鎵�浠ユ渶濂借缃�0锛屽噺灏戞祦閲忔秷鑰� + string param = "SendAudio=0\r\n" + "SendVideo=0\r\n" + "RequestAudio=0\r\n" + "RequestVideo=0\r\n" + "UserData=" + UserData + "\r\n"; + mPhone.Monitor(address, param); + } + } + + private void IniView() + { + mRemoteFrameContainer = (FrameLayout)FindViewById(Resource.Id.remoteFrame); + + ivBack = (ImageView)FindViewById(Resource.Id.icon_back); + tvName = (TextView)FindViewById(Resource.Id.tv_name); + tvRoomName = (TextView)FindViewById(Resource.Id.tv_roomName); + + tvRoomName.SetText(RoomName, null); + tvName.SetText(DeviceName, null); + + ivBack.SetOnClickListener(this); + } + + private void IniData() + { + try + { + if (mPhone == null) + { + string _params = "port=8554\r\n" + "packcode=cd89ae3460c8f396c748bb7d2668dfd0\r\n"; //鍒濆鍖栧璁茬鍙o紝榛樿灏卞ソ锛岃窡闂ㄥ彛鏈鸿缃鍖归厤,娉ㄦ剰鏂版帴鍙i渶瑕佸鍔爌ackcode鍙傛暟锛岄渶瑕佹妸浣犱滑鐨勫寘鍚嶅彂杩囨潵 + mPhone = new VideoPhone(this, this, _params); + + if (mRemoteSurfaceHolder != null) + { + mPhone.SetRemoteSurfaceHolder(mRemoteSurfaceHolder, "mRemoteSurfaceHolder!=null"); //璁剧疆鏉ョ數绐楀彛 + } + + ViewGroup v = (ViewGroup)FindViewById(Resource.Id.localVideo); + mPhone.SetLocalVideoContainer(v);//璁剧疆鏈湴瑙嗛绐楀彛锛屼竴瀹氳璋冪敤锛屼笉鐒跺悗浼氬嚭鐜版病澹伴煶 + } + else + { + mPhone.StopStream(); + mPhone.Release(); + mPhone = null; + } + } + catch (Exception e) + { + string error = e.Message; + } + } + + protected override void OnResume() + { + base.OnResume(); + + if (mPhone != null) + { + mPhone.OnActivityResume(); + } + } + + protected override void OnPause() + { + base.OnPause(); + if (mPhone != null) + { + //mPhone.OnActivityPause(); + } + } + + protected override void OnDestroy() + { + base.OnDestroy(); + if (mPhone != null) + { + mPhone.HangUp(); + mPhone.Release(); + mPhone = null; + //mPhone.OnActivityDestroy(); + } + } + + public override void OnBackPressed() + { + if (mPhone != null) + mPhone.HangUp(); + else + Finish(); + } + + public void OnClick(View v) + { + if (v.Equals(ivBack)) + { + if (mPhone != null) + mPhone.HangUp(); + else + Finish(); + } + } + + //涓嶈兘鐢╒iew.INVISIBLE鏉ュ畬鍏ㄩ殣钘�,鍚﹀垯MediaCodec.configure浼氭姤ava.lang.IllegalArgumentException: The surface has been released + //[Obsolete] + private void showRemoteVideo() + { + try + { + if (mSurfaceRemote != null) + { + return; + } + mSurfaceRemote = new SurfaceView(this, null); + ISurfaceHolder holder = mSurfaceRemote.Holder; + holder.AddCallback(this);//ISurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS + holder.SetType(SurfaceType.PushBuffers); + + //鍙戠幇绗竴娆how鏃朵細闂睆涓�涓嬶紝鍚庨潰hide鍐峴how鏃朵笉浼氶棯灞� + FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.MatchParent); + //v.setId(View.generateViewId()); + mSurfaceRemote.LayoutParameters = lp; + mRemoteFrameContainer.AddView(mSurfaceRemote); + } + catch { } + } + + private void hideRemoteVideo() + { + try + { + if (mSurfaceRemote != null) + { + mRemoteFrameContainer.RemoveView(mSurfaceRemote); + mSurfaceRemote = null; + } + } + catch { } + } + + /// <summary> + /// 寮瑰嚭宸叉寕鏂彁绀� + /// </summary> + private void showTipDialog(string title, string text, string btnText,bool isClose) + { + try + { + TipDiaglog diaglog = new TipDiaglog(this); + diaglog.SetAutoClose(isClose); + diaglog.SetTitleText(title);//"鎻愮ず" + diaglog.SetContentText(text);//"宸叉寕鏂�" + diaglog.SetConfirmText(btnText);//"纭" + diaglog.SetCanceledOnTouchOutside(false); + diaglog.Show(); + diaglog.Create(); + diaglog.SetConfirmClickListener(this); + } + catch (Exception e) + { + string ss = e.Message; + } + } + + public void SurfaceChanged(ISurfaceHolder holder, [GeneratedEnum] Format format, int width, int height) + { + mRemoteSurfaceHolder = holder; + if (mPhone != null) + { + mPhone.SetRemoteSurfaceHolder(holder, "surfaceChanged"); + } + } + + public void SurfaceCreated(ISurfaceHolder holder) + { + mRemoteSurfaceHolder = holder; + if (mPhone != null) + { + mPhone.SetRemoteSurfaceHolder(holder, "surfaceCreated"); + } + } + + public void SurfaceDestroyed(ISurfaceHolder holder) + { + mRemoteSurfaceHolder = null; + if (mPhone != null) + { + mPhone.SetRemoteSurfaceHolder(null, "surfaceDestroyed"); + } + } + + //鐢变簬android妗嗘灦闄愬埗锛岃婊¤冻濡備笅鏉′欢鎵嶈兘寮�娴�:activity瑕佸湪鍓嶅彴锛屽苟涓攕urfaceview鍙敤 + private void startStream(String reason) + { + if (mPhone != null) + { + try + { + //寮�娴佷箣鍓嶅彲閰嶇疆瑙嗛灏哄锛岀爜鐜囷紝甯х巼 閽堝鐨勬槸鏈湴 + //mPhone.SetVideoSize(640, 480);//1920x1080,1280x720,640x480 + //mPhone.SetBps(1.5 * 1024 * 1024); + //mPhone.SetFps(30); + mPhone.StartStream(); + } + catch (Exception e) + { + string ss = e.Message; + } + } + } + + //[Obsolete] + public void OnPhoneEvent(string msg) + { + try + { + if (monitorFragment != null) + { + monitorFragment.onPhoneEvent(msg); + } + + if (reverseCallFragment != null) + { + reverseCallFragment.onPhoneEvent(msg); + } + + TextProtocol tp = new TextProtocol(); + tp.Parse(msg); + string event1 = tp.GetString("event"); + + switch (event1) + { + case "EVT_Ringing": + mPhone.RequestCallerSendVideo(); + showRemoteVideo(); + break; + case "EVT_Connected": + if (!mPhone.IsStreamRunning) + { + //鐢变簬android妗嗘灦闄愬埗锛岃婊¤冻濡備笅鏉′欢鎵嶈兘寮�娴�: activity瑕佸湪鍓嶅彴锛屽苟涓攕urfaceview鍙敤 + startStream("EVT_Connected"); + } + showRemoteVideo(); + break; + case "EVT_StartStream": + startStream("EVT_StreamStream"); + break; + case "EVT_StopStream": + mPhone.StopStream(); + break; + case "EVT_MonitorConnected": + if (!mPhone.IsStreamRunning) + { + startStream("EVT_MonitorConnected"); + } + showRemoteVideo(); + break; + case "EVT_HangUp": + hideRemoteVideo(); + if (mPhone != null) + { + mPhone.StopStream(); + } + showTipDialog("鎻愮ず", "宸叉寕鏂�", "纭", true); + break; + case "EVT_RECV_CUSTOM_DATA": + string data = tp.GetString("data"); + //updataUnlockState(); + break; + case "EVT_SnapAck": + int error = tp.GetInt("error"); + string filePath = tp.GetString("filePath"); + if (error == 0) + { + showTipDialog("鎻愮ず", "鎶撳浘鎴愬姛", "纭", false); + } + else + { + showTipDialog("鎻愮ず", "鎶撳浘澶辫触\n\r" + error, "纭", false); + } + break; + } + } + catch (Exception e) + { + string error = e.Message; + } + } + + public void OnRecvAudioFrame(byte[] p0) + { + //throw new NotImplementedException(); + } + + public void OnRecvVideoFrame(byte[] p0) + { + //throw new NotImplementedException(); + } + + public void onSureClick(TipDiaglog dialoog, View v, bool bol) + { + dialoog.Dismiss(); + if (bol) + this.Finish(); + } + } +} -- Gitblit v1.8.0