using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using Android.App; using Android.Content; using Android.Icu.Text; using Android.OS; using Android.Runtime; using Android.Util; using Android.Views; using Android.Widget; using Com.ETouchSky; using Com.Tool; using HDL_ON.Common; using HDL_ON.DAL.Server; using HDL_ON_Android.FengLinVideo.Interface; using Java.Util; using Org.Json; namespace HDL_ON_Android.FengLinVideo.Form { public class ReverseCallFragment : Fragment, View.IOnClickListener, VideoState { private VideoPhone mPhone; private string param = ""; private bool isCalling = false; 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; public ReverseCallFragment(VideoPhone _phone, string _param) { this.mPhone = _phone; this.param = _param; } public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mView = inflater.Inflate(Resource.Layout.fragment_call, container, false); IniView(); ReverseCall(param); 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); } /// /// 一般是推送过的来电信息时调用此接口打开视频窗口。然后可调用mPhone.acceptRing(param);接收来电信息 /// /// private void ReverseCall(string param) { if (mPhone != null) { mPhone.ReverseCall(param); } } /// /// 开锁 /// private void Unlock() { //开锁,当收到来电信息时可进行开锁操作 if (mPhone != null) { try { unlockImg.Selected = true; JSONObject ht = new JSONObject(); ht.Put("command", "open");//固定参数 ht.Put("room_id", 123); //动态参数 ,传递开门的房间号。这个开门口记录就能记录谁开的门 ht.Put("devType", 7); //固定参数 mPhone.SendCustomData(ht.ToString()); } catch (Exception e) { string erro = e.Message; } } } public static Thread unlockThread = null;//公开出来,关闭activity的时候要结束这个线程,不然会引起崩溃 /// /// 更新开锁按钮状态,开锁成功,15秒内不给再点击按钮 /// private void UpdataUnlockState() { try { if (unlockImg == null) return; unlockImg.Enabled = false; unlockThread = new Thread(() => { try { Thread.Sleep(15 * 1000); Activity.RunOnUiThread(() => { try { if (unlockImg != null) unlockImg.Enabled = true; } catch { } }); } catch { } });//.Start(); unlockThread.Start(); PostUnlock(); } 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; } /// /// 通话记录计时器,从拉流成功开始计算时间 /// private void TimeStarts() { try { if (timer != null) timer.Dispose(); TimerCallback timerCallback = new TimerCallback(Tick); timer = new System.Threading.Timer(timerCallback, null, 0, 1000); } catch (Exception) { } } private 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 OnPhoneEvent(string msg) { try { // TextProtocol tp = new TextProtocol(); tp.Parse(msg); string event1 = tp.GetString("event"); switch (event1) { case "EVT_RECV_CUSTOM_DATA":// 开锁成功 string data = tp.GetString("data"); UpdataUnlockState(); break; case "EVT_StartStream":// 拉流成功,开始记录通话时间 isCalling = true; TimeStarts(); hangupText.SetText(GetString(Resource.String.video_hang_up), null); break; case "EVT_StopStream": if (isCalling == false) PostReject();// 拒接 else PostHangup();// 正常挂断 break; case "EVT_SnapAck": int error = tp.GetInt("error"); string filePath = tp.GetString("filePath"); if (error == 0) { screenshotImg.Selected = true; PostScreenshot(filePath); } else { screenshotImg.Selected = false; } break; } } catch (Exception e) { string error = e.Message; } } public void OnClick(View v) { if (v.Equals(answerImg)) { //接收来电 if (mPhone != null) { if (mPhone.IsRinging) { string UserData = "user text"; //注意:RequestAudio 请求对方音频,RequestVideo请求对方视频 SendAudio发送本地音频 SendVideo 发送本地视频 一般门口不接收到视频,所以最好设置0,减少流量消耗 string param = string.Format("RequestAudio=1\r\n" + "RequestVideo=1\r\n" + "SendAudio=1\r\n" + "SendVideo=1r\n" + "UserData=%s\r\n", UserData); mPhone.AcceptRing(param); answerLayout.Visibility = ViewStates.Gone; PostAnswer(); } } } else if (v.Equals(hangupImg)) { if (mPhone != null) { mPhone.HangUp(); TimeEnd(); } Activity.Finish(); } else if (v.Equals(screenshotImg)) { //有视频过来可调用此接口进行拍照 if (mPhone != null) { // 内部储存/DCIM/Camera/.....jpg 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"; mPhone.Snap(path); //2021-09-01 增加发送广播,通知刷新图库的显示 HDLONUtils.SendBroadcastScanFile(this.Context, path); } } else if (v.Equals(unlockImg)) { Unlock(); } } /// /// post 截图 /// /// 截图保留的路径 private void PostScreenshot(string path) { new Thread(() => { try { string[] str = path.Split("/"); string img_name = str.GetValue(str.Length - 1).ToString().Replace(".jpg", ""); byte[] images = FileUtlis.Files.ReadFileForPath(path); Dictionary d = new Dictionary(); d.Add("callId", VideoActivity.CallId); d.Add("images", images); d.Add("imagesName", "_Android.jpg"); string jsonString = HttpUtil.GetSignRequestJson(d); string url = "/home-wisdom/app/fl/vi/screenshot"; ResponsePackNew response = HttpUtil.RequestHttpsPost(url, jsonString); Log.Info("FengLinVideo", "Post Screenshot Response code=" + response.Code); } catch { } }).Start(); } /// /// post 接听电话记录 /// private void PostAnswer() { new Thread(() => { try { Dictionary d = new Dictionary(); d.Add("uuid", VideoActivity.UUId);//丰林请求的唯一id string d.Add("cmtID", VideoActivity.CmtID);//丰林社区id string d.Add("roomno", VideoActivity.Roomno);//丰林房间号 string d.Add("unitno", VideoActivity.Unitno);//丰林楼栋号 string d.Add("HomeID", VideoActivity.HomeID);//丰林住宅id string d.Add("callId", VideoActivity.CallId);//呼叫记录id int string jsonString = HttpUtil.GetSignRequestJson(d); string url = "/home-wisdom/app/fl/vi/answer"; ResponsePackNew response = HttpUtil.RequestHttpsPost(url, jsonString); Log.Info("FengLinVideo", "Post Answer Response code=" + response.Code); } catch { } }).Start(); } /// /// post 挂断电话记录 /// private void PostHangup() { new Thread(() => { try { Dictionary d = new Dictionary(); d.Add("callId", VideoActivity.CallId);//呼叫记录id int d.Add("callDuration", Time);//通话时长(秒) int string jsonString = HttpUtil.GetSignRequestJson(d); string url = "/home-wisdom/app/fl/vi/hang-up"; ResponsePackNew response = HttpUtil.RequestHttpsPost(url, jsonString); Log.Info("FengLinVideo", "Post Hangup Response code=" + response.Code); } catch { } }).Start(); } /// /// post 拒接记录 /// private void PostReject() { new Thread(() => { try { Dictionary d = new Dictionary(); d.Add("callId", VideoActivity.CallId);//呼叫记录id int string jsonString = HttpUtil.GetSignRequestJson(d); string url = "/home-wisdom/app/fl/vi/reject"; ResponsePackNew response = HttpUtil.RequestHttpsPost(url, jsonString); Log.Info("FengLinVideo", "Post Reject Response code=" + response.Code); } catch { } }).Start(); } /// /// post 开锁记录 /// private void PostUnlock() { new Thread(() => { try { Dictionary d = new Dictionary(); d.Add("callId", VideoActivity.CallId);//呼叫记录id int string jsonString = HttpUtil.GetSignRequestJson(d); string url = "/home-wisdom/app/fl/vi/unlock"; ResponsePackNew response = HttpUtil.RequestHttpsPost(url, jsonString); Log.Info("FengLinVideo", "Post Reject Response code=" + response.Code); } catch { } }).Start(); } } }