using System; using System.Collections.Generic; using System.Threading; using Android.App; using Android.Icu.Text; using Android.OS; using Android.Runtime; using Android.Util; using Android.Views; using Android.Widget; using HDL_ON.Common; using HDL_ON.DAL.Server; using Java.Util; namespace HDL_ON_Android.LeChengView.Form { public class ReverseCallFragment : Fragment, View.IOnClickListener { private View mView; private ImageView screenshotImg;// 截图 private ImageView unlockImg;// 开锁 private LinearLayout answerLayout; // 接听 private ImageView hangupImg;// 挂断 private ImageView answerImg;// 接听 private TextView hangupText; private TextView tvTip; private System.Threading.Timer timer = null; private int Time = 0; private bool isAnswer;//是否已经点击接听过了 private static LeChengVideoActivity CurtActivity; public override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); CurtActivity = (LeChengVideoActivity)this.Activity; } public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mView = inflater.Inflate(Resource.Layout.fragment_call, container, false); IniView(); CurtActivity.Play(); CurtActivity.CloseAudio(); return mView; } private void IniView() { screenshotImg = (ImageView)mView.FindViewById(Resource.Id.callScreenshotImg);// unlockImg = (ImageView)mView.FindViewById(Resource.Id.callUnlockImg);// tvTip = (TextView)mView.FindViewById(Resource.Id.callTipText); answerLayout = (LinearLayout)mView.FindViewById(Resource.Id.callAnswerLayout); hangupImg = (ImageView)mView.FindViewById(Resource.Id.callHangupImg); answerImg = (ImageView)mView.FindViewById(Resource.Id.callAnswerImg); hangupText = (TextView)mView.FindViewById(Resource.Id.callHangupText); screenshotImg.SetOnClickListener(this); unlockImg.SetOnClickListener(this); hangupImg.SetOnClickListener(this); answerImg.SetOnClickListener(this); hangupText.SetText(GetString(Resource.String.video_not_answer), null); tvTip.SetText(GetString(Resource.String.calling), null); } /// /// 开锁 /// private void PostUnlock() { //开锁,当收到来电信息时可进行开锁操作 new Thread(() => { try { Dictionary d = new Dictionary(); d.Add("deviceId", CurtActivity.DeviceId);//设备id string jsonString = HttpUtil.GetSignRequestJson(d); string url = "/home-wisdom/platform/imou/openDoorbell"; ResponsePackNew response = HttpUtil.RequestHttpsPost(url, jsonString); Log.Info("LcVideo", "Post Unlock Response code=" + response.Code); } catch { } }).Start(); } /// /// 开锁 /// private void Unlock() { // CurtActivity.Unlock(); UpdataUnlockState(); } /// /// 更新开锁按钮状态,开锁成功,15秒内不给再点击按钮 /// private void UpdataUnlockState() { try { if (unlockImg == null) return; unlockImg.Enabled = false; new Thread(() => { Thread.Sleep(15 * 1000); Activity.RunOnUiThread(() => { if (unlockImg != null) unlockImg.Enabled = true; }); }).Start(); } catch { } } private string GetTime(int time) { int m = time / 60; int s = time % 60; return UnitFormat(m) + ":" + UnitFormat(s); } private static string UnitFormat(int i) { string retStr = null; if (i >= 0 && i < 10) retStr = "0" + i; else retStr = "" + i; return retStr; } /// /// 通话记录计时器,从拉流成功开始计算时间 /// public void TimeStarts() { try { if (timer != null) timer.Dispose(); TimerCallback timerCallback = new TimerCallback(Tick); timer = new System.Threading.Timer(timerCallback, null, 0, 1000); } catch (Exception) { } } public void TimeEnd() { Time = 0; if (timer != null) { timer.Dispose(); timer = null; } } public void Tick(object state) { try { Activity.RunOnUiThread(() => { try { Time++; if (tvTip != null) tvTip.SetText(GetTime(Time), null); } catch { } }); } catch { } } public void OnClick(View v) { if (v.Equals(answerImg)) { //接收来电 isAnswer = true; CurtActivity.StartTalk(); answerLayout.Visibility = ViewStates.Gone; PostAnswer(); } else if (v.Equals(hangupImg)) { CurtActivity.StopTalk(); //2021-11-30 增加拒绝和挂断操作处理 if (isAnswer) { //如果接听过了,执行挂断接口 PostHangup(); } else { //没接听直接挂断,执行拒接接口 PostReject(); } TimeEnd(); Activity.Finish(); } else if (v.Equals(screenshotImg)) { //有视频过来可调用此接口进行拍照 screenshotImg.Selected = true; SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss"); string time = format.Format(new Date(SystemClock.CurrentThreadTimeMillis())); string ss = Android.OS.Environment.ExternalStorageDirectory.Path + "/DCIM/Camera"; string path = ss + "/" + time + ".jpg"; CurtActivity.SnapShot(path); } else if (v.Equals(unlockImg)) { CurtActivity.Unlock(); } } /// /// post 接听电话记录 /// public void PostAnswer() { new Thread(() => { try { Dictionary d = new Dictionary(); d.Add("callId", CurtActivity.CallId);//呼叫id d.Add("callStatus", "RECEIVED");//可用值:MISSED,RECEIVED,REJECT // d.Add("callDuration", Time);//通话时长(秒) d.Add("interphoneTypeEnum", "IMOUVISIAL");//可用值:FLVI,IMOUVISIAL string jsonString = HttpUtil.GetSignRequestJson(d); string url = "/home-wisdom/platform/imou/updateCallStatus"; ResponsePackNew response = HttpUtil.RequestHttpsPost(url, jsonString); Log.Info("LcVideo", "Post Answer Response code=" + response.Code); } catch { } }).Start(); } /// /// post 挂断电话记录 /// public void PostHangup() { new Thread(() => { try { Dictionary d = new Dictionary(); d.Add("callId", CurtActivity.CallId);//呼叫id d.Add("callStatus", "RECEIVED");//可用值:MISSED,RECEIVED,REJECT d.Add("callDuration", Time);//通话时长(秒) d.Add("interphoneTypeEnum", "IMOUVISIAL");//可用值:FLVI,IMOUVISIAL string jsonString = HttpUtil.GetSignRequestJson(d); string url = "/home-wisdom/platform/imou/updateCallStatus"; ResponsePackNew response = HttpUtil.RequestHttpsPost(url, jsonString); Log.Info("LcVideo", "Post Hangup Response code=" + response.Code); } catch { } }).Start(); } /// /// post 拒接记录,仅只有在正常挂断状态下才提交通话时间 /// public void PostReject() { new Thread(() => { try { Dictionary d = new Dictionary(); d.Add("callId", CurtActivity.CallId);//呼叫id d.Add("callStatus", "REJECT");//可用值:MISSED,RECEIVED,REJECT string jsonString = HttpUtil.GetSignRequestJson(d); string url = "/home-wisdom/platform/imou/updateCallStatus"; ResponsePackNew response = HttpUtil.RequestHttpsPost(url, jsonString); Log.Info("LcVideo", "Post Reject Response code=" + response.Code); } catch { } }).Start(); } } }