New file |
| | |
| | | |
| | | 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(); |
| | | } |
| | | } |
| | | } |
| | | } |