|
@@ -1,279 +0,0 @@
|
|
|
-package com.wdkl.ncs.android.component.home.activity
|
|
|
-
|
|
|
-import android.app.Activity
|
|
|
-import android.bluetooth.BluetoothAdapter
|
|
|
-import android.bluetooth.BluetoothHeadset
|
|
|
-import android.media.AudioManager
|
|
|
-import android.os.Bundle
|
|
|
-import android.os.CountDownTimer
|
|
|
-import android.os.Handler
|
|
|
-import android.os.SystemClock
|
|
|
-import android.util.Log
|
|
|
-import android.view.KeyEvent
|
|
|
-import android.view.View
|
|
|
-import com.google.gson.Gson
|
|
|
-import com.wdkl.core.voip.VoipEvent
|
|
|
-import com.wdkl.ncs.android.component.home.R
|
|
|
-import com.wdkl.ncs.android.component.home.util.MediaPlayHelper
|
|
|
-import com.wdkl.ncs.android.component.nursehome.common.Constants
|
|
|
-import com.wdkl.ncs.android.lib.utils.AppTool
|
|
|
-import com.wdkl.ncs.android.lib.utils.showMessage
|
|
|
-import com.wdkl.ncs.android.middleware.model.vo.InteractionVO
|
|
|
-import com.wdkl.ncs.android.middleware.tcp.TcpClient
|
|
|
-import com.wdkl.ncs.android.middleware.tcp.channel.DeviceChannel
|
|
|
-import com.wdkl.ncs.android.middleware.tcp.channel.VoiceUtil
|
|
|
-import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel
|
|
|
-import com.wdkl.ncs.android.middleware.tcp.enums.TcpAction
|
|
|
-import com.wdkl.ncs.android.middleware.tcp.enums.TcpType
|
|
|
-import com.wdkl.ncs.android.middleware.utils.MessageEvent
|
|
|
-import com.wdkl.skywebrtc.SkyEngineKit
|
|
|
-import com.wdkl.skywebrtc.except.NotInitializedException
|
|
|
-import kotlinx.android.synthetic.main.activity_sip_voip_audio.bao_mother_name_tv
|
|
|
-import kotlinx.android.synthetic.main.activity_sip_voip_audio.call_duration_tv
|
|
|
-import kotlinx.android.synthetic.main.activity_sip_voip_audio.hang_up_imagev
|
|
|
-import kotlinx.android.synthetic.main.activity_sip_voip_audio.room_number_tv
|
|
|
-import kotlinx.android.synthetic.main.activity_web_rtc_voip_audio.*
|
|
|
-import org.greenrobot.eventbus.EventBus
|
|
|
-import org.greenrobot.eventbus.Subscribe
|
|
|
-import org.greenrobot.eventbus.ThreadMode
|
|
|
-import java.util.*
|
|
|
-
|
|
|
-class WebRTCVoipAudioActivity : Activity(), View.OnClickListener {
|
|
|
- var TAG = WebRTCVoipAudioActivity::class.java.simpleName
|
|
|
-
|
|
|
- var ACTION = "ACTION"
|
|
|
- var RING = "RING"
|
|
|
- var CALLING = "CALLING"
|
|
|
- var CALL = "CALL"
|
|
|
- private var action: String? = null
|
|
|
- private var targetId: String? = null
|
|
|
- var tcpModel = TcpModel()
|
|
|
-
|
|
|
- private var gEngineKit: SkyEngineKit? = null
|
|
|
- private var handsFree:Boolean = false //免提状态
|
|
|
-
|
|
|
- private var CALL_TIMEOUT = 2 //多久可以再次点击
|
|
|
- //呼叫倒计时
|
|
|
- lateinit var countDownTimer: CountDownTimer
|
|
|
- private var isClick = false //是否可点击
|
|
|
-
|
|
|
-
|
|
|
- override fun onCreate(savedInstanceState: Bundle?) {
|
|
|
- super.onCreate(savedInstanceState)
|
|
|
-// window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
|
|
|
-// WindowManager.LayoutParams.FLAG_FULLSCREEN)
|
|
|
- setContentView(R.layout.activity_web_rtc_voip_audio)
|
|
|
- if (!EventBus.getDefault().isRegistered(this)) {
|
|
|
- EventBus.getDefault().register(this)
|
|
|
- }
|
|
|
- MediaPlayHelper.getInstance().stopMusic()
|
|
|
- initCountDownTimer()
|
|
|
- countDownTimer.start()
|
|
|
-
|
|
|
- //设置为通话状态 有其他用户输入时 DeviceChannel设置返回通话中
|
|
|
- DeviceChannel.calling = true
|
|
|
- init()
|
|
|
-
|
|
|
- try {
|
|
|
- gEngineKit = SkyEngineKit.Instance()
|
|
|
- } catch (e: NotInitializedException) {
|
|
|
- SkyEngineKit.init(VoipEvent()) //重新初始化
|
|
|
- try {
|
|
|
- gEngineKit = SkyEngineKit.Instance()
|
|
|
- } catch (ex: NotInitializedException) {
|
|
|
- finish()
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- targetId = intent.getStringExtra("targetId")
|
|
|
- Log.i(TAG, "SIP账号$targetId")
|
|
|
- tcpModel = intent.getSerializableExtra("TcpModel") as TcpModel
|
|
|
- action = intent.getStringExtra(ACTION)
|
|
|
-
|
|
|
- Log.i(TAG, "tcpModel" + tcpModel.action)
|
|
|
-
|
|
|
- if (tcpModel.type == TcpType.VOICE) {
|
|
|
- if (tcpModel.action === TcpAction.VoiceAction.CALL) {
|
|
|
- val interactionVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
|
|
|
- room_number_tv.text = interactionVO.fromFrameFullName
|
|
|
- bao_mother_name_tv.setText(interactionVO.fromMemberName)
|
|
|
- } else if (tcpModel.action === TcpAction.VoiceAction.SUCCESS) {
|
|
|
- val interactionVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
|
|
|
- room_number_tv.text = interactionVO.toFrameFullName
|
|
|
- bao_mother_name_tv.setText(interactionVO.toMemberName)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (action == CALLING) {
|
|
|
- Log.i(TAG, "自己同意 拨打过去。。。")
|
|
|
- createCallout()
|
|
|
-
|
|
|
- call_duration_tv.visibility = View.VISIBLE
|
|
|
- call_duration_tv.text = "连接中...."
|
|
|
-
|
|
|
- } else if (action == RING) {
|
|
|
- Log.i(TAG, "接电话。。。")
|
|
|
- } else if (action == CALL) { //主动拨出,服务端回复success时
|
|
|
- MediaPlayHelper.getInstance().playResMusic(R.raw.outgoing_call, 0.6f, true)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- override fun onStart() {
|
|
|
- super.onStart()
|
|
|
- }
|
|
|
-
|
|
|
- fun init() {
|
|
|
- hang_up_imagev.setOnClickListener(this)
|
|
|
- hands_free_image.setOnClickListener(this)
|
|
|
- }
|
|
|
-
|
|
|
- fun createCallout(){
|
|
|
- Handler().postDelayed({
|
|
|
- call_duration_tv.base = SystemClock.elapsedRealtime()
|
|
|
- call_duration_tv.start()
|
|
|
- }, 2900)
|
|
|
-
|
|
|
- var room = UUID.randomUUID().toString() + System.currentTimeMillis()
|
|
|
- Log.i(TAG, "生成的房间号room " + room + "sipid targetId" + targetId)
|
|
|
-
|
|
|
- val b = gEngineKit?.startOutCall(applicationContext, room, targetId, true)
|
|
|
- val session = gEngineKit?.getCurrentSession()
|
|
|
- Handler().postDelayed({
|
|
|
- //防止建立连接的时候 不能成功切换外音
|
|
|
- session?.toggleSpeaker(true)
|
|
|
- }, 3500)
|
|
|
- }
|
|
|
-
|
|
|
- override fun onClick(p0: View?) {
|
|
|
- when (p0?.id) {
|
|
|
- R.id.hang_up_imagev -> {
|
|
|
- handOffCall()
|
|
|
- }
|
|
|
- R.id.hands_free_image -> {
|
|
|
- Log.i(TAG,"声音切换点击")
|
|
|
- if (!handsFree) {
|
|
|
- hands_free_image.setImageResource(R.drawable.av_handfree_hover)
|
|
|
- val session = gEngineKit?.getCurrentSession()
|
|
|
- if (session != null) {
|
|
|
- session?.toggleSpeaker(true)
|
|
|
- }
|
|
|
- handsFree = true
|
|
|
- } else {
|
|
|
- hands_free_image.setImageResource(R.drawable.av_handfree)
|
|
|
- val session = gEngineKit?.getCurrentSession()
|
|
|
- if (session != null) {
|
|
|
- session?.toggleSpeaker(false)
|
|
|
- }
|
|
|
- handsFree = false
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- fun handOffCall(){
|
|
|
- if(!isClick)return
|
|
|
-
|
|
|
- var interactionVO: InteractionVO? = null
|
|
|
- if (tcpModel.data.javaClass.name == String::class.java.name) {
|
|
|
- interactionVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
|
|
|
- } else {
|
|
|
- interactionVO = tcpModel.data as InteractionVO
|
|
|
- }
|
|
|
- Log.i(TAG, "tcpModel" + interactionVO!!.id!!)
|
|
|
- Log.i(TAG, "tcpModel" + tcpModel.toJson())
|
|
|
-
|
|
|
- //给服务器发送挂断 tcp
|
|
|
- if (tcpModel.type == TcpType.VOICE) {
|
|
|
- if (tcpModel.action === TcpAction.VoiceAction.SUCCESS) {
|
|
|
- val voiceUtilTcpModel = VoiceUtil.voiceHandoff(Constants.deviceId, tcpModel.toId, interactionVO.id)
|
|
|
- TcpClient.getInstance().sendMsg(voiceUtilTcpModel.toJson())
|
|
|
- } else if (tcpModel.action === TcpAction.VoiceAction.CALL) {
|
|
|
- val voiceUtilTcpModel = VoiceUtil.voiceHandoff(Constants.deviceId, tcpModel.fromId, interactionVO.id)
|
|
|
- TcpClient.getInstance().sendMsg(voiceUtilTcpModel.toJson())
|
|
|
- }
|
|
|
-
|
|
|
- //webrtc
|
|
|
- val session = gEngineKit?.getCurrentSession()
|
|
|
- if (session != null) {
|
|
|
- session.leave()
|
|
|
- }
|
|
|
- finish()
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- fun initCountDownTimer() {
|
|
|
- countDownTimer = object : CountDownTimer(CALL_TIMEOUT * 1000L, 1000) {
|
|
|
- override fun onTick(millisUntilFinished: Long) {
|
|
|
- }
|
|
|
- override fun onFinish() {
|
|
|
- isClick = true
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @Subscribe(threadMode = ThreadMode.MAIN)
|
|
|
- fun onMoonEvent(messageEvent: MessageEvent) {
|
|
|
- if (messageEvent.tag == 2) {
|
|
|
-
|
|
|
- val tcpModel = messageEvent.getMessage() as TcpModel
|
|
|
- Log.i(TAG, "收到数据 " + tcpModel.toJson())
|
|
|
- if (tcpModel.action === TcpAction.VoiceAction.ACCEPT) {
|
|
|
- MediaPlayHelper.getInstance().stopMusic()
|
|
|
- Log.i(TAG, "对方接听电话啦")
|
|
|
- call_duration_tv.visibility = View.VISIBLE
|
|
|
- call_duration_tv.text = "连接中...."
|
|
|
- createCallout()
|
|
|
- } else if (tcpModel.action == TcpAction.VoiceAction.HANDOFF) { //对方挂断
|
|
|
- call_duration_tv.stop()
|
|
|
- val session = gEngineKit?.getCurrentSession()
|
|
|
- if (session != null) {
|
|
|
- session.leave()
|
|
|
- }
|
|
|
- DeviceChannel.calling = false;
|
|
|
- finish()
|
|
|
- } else if (tcpModel.action === TcpAction.VoiceAction.REJECT) {
|
|
|
- //voiceStatus.setText("对方拒绝接听");
|
|
|
- showMessage("对方拒绝接听")
|
|
|
- MediaPlayHelper.getInstance().stopMusic()
|
|
|
- DeviceChannel.calling = false;
|
|
|
- finish()
|
|
|
- } else if (tcpModel.action === TcpAction.VoiceAction.CALLING) {
|
|
|
- //voiceStatus.setText("对方正在通话");
|
|
|
- showMessage("对方正在通话")
|
|
|
- DeviceChannel.calling = false;
|
|
|
- AppTool.Time.delay(3000) {
|
|
|
- MediaPlayHelper.getInstance().stopMusic()
|
|
|
- finish()
|
|
|
- }
|
|
|
- } else if (tcpModel.action === TcpAction.VoiceAction.FAILED) {
|
|
|
- //voiceStatus.setText("对方拒绝");
|
|
|
- showMessage("呼叫失败,对方可能不在线")
|
|
|
- DeviceChannel.calling = false;
|
|
|
- MediaPlayHelper.getInstance().stopMusic()
|
|
|
- finish()
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
|
|
|
- Log.i(TAG, "keyup keyCode " + keyCode)
|
|
|
- if (keyCode == KeyEvent.KEYCODE_HEADSETHOOK){
|
|
|
- handOffCall()
|
|
|
- } else if (keyCode == KeyEvent.KEYCODE_BACK) {
|
|
|
-// Toast.makeText(this, "按下了back键 onKeyDown()", Toast.LENGTH_SHORT).show()
|
|
|
- return false
|
|
|
- }
|
|
|
- return super.onKeyDown(keyCode, event)
|
|
|
- }
|
|
|
-
|
|
|
- override fun onDestroy() {
|
|
|
- super.onDestroy()
|
|
|
- //todo 状态设置为未在通话中
|
|
|
- DeviceChannel.calling = false
|
|
|
- if(countDownTimer != null){
|
|
|
- countDownTimer.cancel()
|
|
|
- }
|
|
|
- MediaPlayHelper.getInstance().stopMusic()
|
|
|
- EventBus.getDefault().unregister(this)
|
|
|
- }
|
|
|
-}
|