版权声明:本文为博主原创文章,未经博主允许不得转载。 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完成,关闭它