环信SDK Demo中的语音通话的流程分析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qilei2010/article/details/51469943

我想自己独立完成一个语音/视频通话的安卓app,经过比较腾讯云和其他厂商,最后选用环信的SDK,这里是分析环信提供的SDK DEMO。虽然是个DEMO,可依然很复杂。


1. DemoApplication.java
调用 DemoHelper.init(appContext)

2. DemoHelper.java
init方法中调用setGlobalListeners() 设置全局监听

3. DemoHelper.java
setGlobalListeners 方法中注册语音/视频通话监听

	//DemoHelper.java 386
        IntentFilter callFilter = new IntentFilter(EMChatManager.getInstance().getIncomingCallBroadcastAction());
        if(callReceiver == null){
            callReceiver = new CallReceiver();
        }

        //注册通话广播接收者
        appContext.registerReceiver(callReceiver, callFilter);


4. CallReceiver.java
实现一个监听器,动作是根据是语音通话还是视频通话跳转到对应的Activity去。
同时将 拨打方username 和 接听 参数传递过去


5. VoiceCallActivity.java
语音通话界面。
OnCreate
布置按钮等UI元素
给按钮注册点击事件
注册语音电话的状态的监听  addCallStateListener()
接收调用者发过来的参数
若是拨打电话
显示挂断按钮和呼叫状态
拨号铃声响
EMChatManager.getInstance().makeVoiceCall(username);
若是接听电话(有电话进来)
显示接听/拒接的按钮
电话铃声响


onClick(View v)
各个按钮的单击事件处理
接听电话
铃声关
EMChatManager.getInstance().answerCall();
相关按钮的隐藏和显示
closeSpeakerOn();//?
挂断电话
EMChatManager.getInstance().endCall();
拒绝接听
EMChatManager.getInstance().rejectCall();
静音开关
EMChatManager.getInstance().resumeVoiceTransfer();
EMChatManager.getInstance().pauseVoiceTransfer();
免提开关
closeSpeakerOn();
openSpeakerOn();

addCallStateListener()

ACCEPTED 接通成功
关闭铃声
开始通话计时
DISCONNNECTED 电话断了
停止计时
显示电话中断原因




onBackPressed
EMChatManager.getInstance().endCall();
finish();//Activity完成,关闭它



猜你喜欢

转载自blog.csdn.net/qilei2010/article/details/51469943