using System; using System.Threading; using Android.App; using Android.OS; using Android.Views; using Android.Widget; using Com.ETouchSky; using Com.Tool; using GateWay.Droid.FengLinVideo.Interface; using Java.Text; using Org.Json; using Java.Util; namespace GateWay.Droid.FengLinVideo.Forms { public class ReverseCallFragment : Fragment, View.IOnClickListener, View.IOnTouchListener, VideoState { private VideoPhone mPhone; private string param = ""; private View mView; private ImageView imgScreenshot; private ImageView imgUnlock; //private ImageView imgHangup; //private ImageView imgCall; private RelativeLayout rlHangup; private RelativeLayout rlCall; private TextView tvHangup; private TextView tvCall; 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 void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); } 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() { imgScreenshot = (ImageView)mView.FindViewById(Resource.Id.icon_screenshot);// imgUnlock = (ImageView)mView.FindViewById(Resource.Id.icon_unlock);// tvTip = (TextView)mView.FindViewById(Resource.Id.tv_tip); rlHangup = (RelativeLayout)mView.FindViewById(Resource.Id.rl_hangup); //imgHangup = (ImageView)mView.FindViewById(Resource.Id.img_hangup); tvHangup = (TextView)mView.FindViewById(Resource.Id.tv_hangup); rlCall = (RelativeLayout)mView.FindViewById(Resource.Id.rl_call); //imgCall = (ImageView)mView.FindViewById(Resource.Id.img_call); tvCall = (TextView)mView.FindViewById(Resource.Id.tv_call); imgScreenshot.SetOnClickListener(this); imgUnlock.SetOnClickListener(this); rlCall.SetOnClickListener(this); rlHangup.SetOnClickListener(this); imgUnlock.SetOnTouchListener(this); imgScreenshot.SetOnTouchListener(this); tvTip.SetText("来电中...", null); } private void ReverseCall(string param) { // //一般是推送过的来电信息时调用此接口打开视频窗口。然后可调用mPhone.acceptRing(param);接收来电信息 if (mPhone != null) { mPhone.ReverseCall(param); } } //开锁 private void Unlock() { //开锁,当收到来电信息时可进行开锁操作 if (mPhone != null) { try { 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; } } } //更新开锁按钮状态 private void UpdataUnlockState() { //开锁成功,15秒内不给再点击按钮 imgUnlock.Enabled = false; imgUnlock.SetImageResource(Resource.Drawable.unlock_disable); new System.Threading.Thread(() => { System.Threading.Thread.Sleep(15 * 1000); Activity.RunOnUiThread(() => { imgUnlock.Enabled = true; imgUnlock.SetImageResource(Resource.Drawable.unlock); }); }).Start(); } 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) { Activity.RunOnUiThread(() => { Time++; tvTip.SetText(getTime(Time), null); }); } 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": UpdataUnlockState(); break; case "EVT_SnapAck": break; case "EVT_StartStream": TimeStarts(); break; } } catch (Exception e) { string error = e.Message; } } public bool OnTouch(View v, MotionEvent e) { if (e.Action == MotionEventActions.Down) { if (v.Equals(rlCall)) { tvCall.Selected = true; } else if (v.Equals(rlHangup)) { tvHangup.Selected = true; } else if (v.Equals(imgUnlock)) { imgUnlock.Selected = true; } else if(v.Equals(imgScreenshot)) { imgScreenshot.Selected = true; } } else if (e.Action == MotionEventActions.Up) { if (v.Equals(rlCall)) { tvCall.Selected = false; } else if (v.Equals(rlHangup)) { tvHangup.Selected = false; } else if (v.Equals(imgUnlock)) { imgUnlock.Selected = false; } else if (v.Equals(imgScreenshot)) { imgScreenshot.Selected = false; } } return false; } public void OnClick(View v) { if (v.Equals(rlCall)) { //接收来电 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); } } rlCall.Visibility = ViewStates.Gone; } else if (v.Equals(rlHangup)) { if (mPhone != null) { mPhone.HangUp(); TimeEnd(); } Activity.Finish(); } else if (v.Equals(imgScreenshot)) { //有视频过来可调用此接口进行拍照 if (mPhone != null) { //有视频过来可调用此接口进行拍照 if (mPhone != null) { SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss"); string time = format.Format(new Date(SystemClock.CurrentThreadTimeMillis())); string ss = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryPictures).AbsolutePath; string path = ss + "/" + time + ".jpg"; mPhone.Snap(path); } } } else if (v.Equals(imgUnlock)) { Unlock(); } } } }