using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android;
using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.Graphics;
using Android.OS;
using Android.Runtime;
using Android.Support.V4.App;
using Android.Support.V4.Content;
using Android.Util;
using Android.Views;
using Android.Widget;
using Com.Lechange.Opensdk.Api;
using Com.Lechange.Opensdk.Device;
using Com.Lechange.Opensdk.Listener;
using Com.Lechange.Opensdk.Media;
using HDL_ON.DAL.Server;
using HDL_ON_Android.LeChengView.Form;
using Java.Lang;
namespace HDL_ON_Android
{
[Activity(Label = "LeChengVideoActivity", WindowSoftInputMode = SoftInput.AdjustResize, LaunchMode = LaunchMode.SingleInstance, ConfigurationChanges = (ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden | ConfigChanges.LayoutDirection | ConfigChanges.Locale | ConfigChanges.Orientation | ConfigChanges.ScreenSize), Theme = "@style/MyTheme1", ScreenOrientation = ScreenOrientation.Portrait)]
public class LeChengVideoActivity : Activity, View.IOnClickListener
{
private static LeChengVideoActivity CurtActivity;
//
private string URL = "openapi.easy4ip.com:443";
public string AccessToken = "";
public string DeviceId = "";
public string Psk = "";
public string PlayToken = "";//播放playToken
public string CallId = "";//呼叫Id
private int Type = 0;//0监控,1对讲
///
/// 0:国内,1海外
///
private int Location = 0;
private FrameLayout flWindow;
private FrameLayout flWindowContent;
private ImageView ivBack;
private TextView tvName;
private MonitorFragment monitorFragment = null;
private ReverseCallFragment reverseCallFragment = null;
public LCOpenSDK_PlayWindow mPlayWindow;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.activity_video_phone);
CurtActivity = this;
AccessToken = Intent.GetStringExtra("AccessToken");//"St_0000d307a13c965c4db285469484490e"
DeviceId = Intent.GetStringExtra("DeviceId");//6K056CFAAJ8FFA1
Psk = Intent.GetStringExtra("Psk");//6K056CFAAJ8FFA1
PlayToken = Intent.GetStringExtra("PlayToken"); // 播放playToken//"8a5e041afa674a2ba3e84d90a54ea962"
Type = Intent.GetIntExtra("Type", 0);//0监控,1对讲//1
Location = Intent.GetIntExtra("Location", 0);//1
CallId = Intent.GetStringExtra("callId");//1384766990812426242
InitLCSDK();
IniView();
IniData();
Permissions();
if (Type == 0)
{
monitorFragment = new MonitorFragment();
FragmentManager.BeginTransaction().Replace(Resource.Id.content, monitorFragment).Commit();
}
else
{
reverseCallFragment = new ReverseCallFragment();
FragmentManager.BeginTransaction().Replace(Resource.Id.content, reverseCallFragment).Commit();
}
}
private void IniView()
{
//
flWindowContent = (FrameLayout)FindViewById(Resource.Id.remoteFrame);
flWindow = (FrameLayout)FindViewById(Resource.Id.live_window);
ivBack = (ImageView)FindViewById(Resource.Id.videoBackImg);
tvName = (TextView)FindViewById(Resource.Id.nameText);
tvName.SetText("DeviceName", null);
ivBack.SetOnClickListener(this);
}
private void IniData()
{
//
//SetStatusBarColor();// 这里设计的TopBarColor是白色,与系统导航栏字体颜色一直,暂时屏蔽不用
mPlayWindow = new LCOpenSDK_PlayWindow();
mPlayWindow.InitPlayWindow(this, flWindowContent, 0, true);
if (Location == 1)
URL = "openapi.easy4ip.com:443";
}
///
/// 初始化乐橙库
///
private void InitLCSDK()
{
InitParams initParams = new InitParams(this, URL, AccessToken);
LCOpenSDK_Api.InitOpenApi(initParams);
}
///
/// 开始播放(预览)
///
public void Play()
{
try
{
LCOpenSDK_ParamReal paramReal = new LCOpenSDK_ParamReal(AccessToken, DeviceId, 0, Psk, PlayToken, 1, false, true);
mPlayWindow.PlayRtspReal(paramReal);
}
catch (System.Exception e)
{
string sss = e.Message;
}
}
///
/// 停止预览(停止播放画面)
///
public void Stop()
{
mPlayWindow.StopRtspReal(true);//关闭视频
}
///
/// 打开对讲
///
public void StartTalk()
{
CloseAudio();// 关闭Audio
LCOpenSDK_Talk.Listener = new AudioTalkerListener();//设置对讲监听
// 对讲参数
LCOpenSDK_ParamTalk paramTalk = new LCOpenSDK_ParamTalk(AccessToken, DeviceId, -1, Psk, PlayToken, true);
LCOpenSDK_Talk.PlayTalk(paramTalk);
}
///
/// 关闭对讲
///
public void StopTalk()
{
LCOpenSDK_Talk.StopTalk();
LCOpenSDK_Talk.Listener = null;
}
///
/// 打开声音(预览的时候可以听到门口机传来的声音)
///
///
public bool OpenAudio()
{
return mPlayWindow.PlayAudio() == 0;
}
///
/// 关闭声音(预览的时候关闭门口挤传来的声音,注意:打开对讲时需要先调用此方法关闭声音)
///
///
public bool CloseAudio()
{
return mPlayWindow.StopAudio() == 0;
}
///
/// 设置顶部状态栏背景透明
///
private void SetStatusBarColor()
{
Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);
Window.SetStatusBarColor(Color.Transparent);
}
///
/// 必要的一些权限
///
private void Permissions()
{
string[] mPermissionList = new string[]
{
Manifest.Permission.WriteExternalStorage,
Manifest.Permission.ReadExternalStorage,
Manifest.Permission.Camera,
Manifest.Permission.RecordAudio
};
foreach (string permissions in mPermissionList)
{
if (ContextCompat.CheckSelfPermission(this, permissions) != 0)
{
ActivityCompat.RequestPermissions(this, new string[] { permissions }, 1);
}
}
}
///
/// 点击事件
///
///
public void OnClick(View v)
{
if (v.Equals(ivBack))
{
this.Finish();
}
}
protected override void OnDestroy()
{
base.OnDestroy();
Stop();
mPlayWindow.UninitPlayWindow();//销毁底层资源
}
///
/// 对讲监听
///
class AudioTalkerListener : LCOpenSDK_TalkerListener
{
///
/// 对讲结果回调
///
///
///
public override void OnTalkResult(string error, int type)
{
base.OnTalkResult(error, type);
try
{
bool talkResult = false;
if (type == 99 || error.Equals("-1000") || error.Equals("0") || error.Equals("1") || error.Equals("3"))
{
talkResult = false;
}
else if (error.Equals("4"))
{
talkResult = true;
}
if (!talkResult)
{
// 提示对讲打开失败
CurtActivity.StopTalk();
CurtActivity.RunOnUiThread(() =>
{
Toast.MakeText(CurtActivity, Resource.String.talk_open_failed, ToastLength.Short).Show();
});
}
else
{
CurtActivity.reverseCallFragment.PostAnswer();// post接听电话,给云端做记录
CurtActivity.reverseCallFragment.TimeStarts();//接通成功打开计时器
}
}
catch { }
}
public override void OnTalkPlayReady()
{
base.OnTalkPlayReady();
}
public override void OnAudioReceive(byte[] bytes, int p1, int p2, int p3, int p4)
{
base.OnAudioReceive(bytes, p1, p2, p3, p4);
}
public override void OnAudioRecord(byte[] bytes, int p1, int p2, int p3, int p4)
{
base.OnAudioRecord(bytes, p1, p2, p3, p4);
}
public override void OnDataLength(int i)
{
base.OnDataLength(i);
}
}
}
}