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