中文帮助文档>SDK

Android SDK开发指南

添加类库:
将SDK包中提供的libs文件夹与assets文件夹的类库文件拷贝到Android工程相应的目录下。
添加SDK权限:
将下列权限配置添加到Android工程中的AndroidManifest.xml文件中。

<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.USE_SIP" />
<uses-permission android:name="android.permission.CONFIGURE_SIP" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.WRITE_CALL_LOG" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

配置SDK核心控制器:
将下表Service与Receiver配置到工程中的AndroidManifest.xml文件中并配置assets目录下的voip.properties文件与红色参数一致。
AUTHORITY_PREFS=com.qmy.voip.prefs
AUTHORITY_DB=com.qmy.voip.sdb
<!-- SIP核心服务 -->
<service
	android:name="com.qmy.voip.service.QmyCallService"
	android:exported="true"
	android:permission="android.permission.CONFIGURE_SIP" >
</service>
<provider
android:name="com.qmy.lib.QMPreferenceProvider"
android:authorities="com.qmy.voip.prefs"
android:permission="android.permission.CONFIGURE_SIP" />
<provider
android:name="com.qmy.lib.QMDBProvider"
android:authorities="com.qmy.voip.sdb"
android:permission="android.permission.CONFIGURE_SIP" />
初始化及配置接口:

1.初始化

/** 
* 启动SDK服务,加载音/视频组件
*  ctx 当前程序上下文(Application)
*/
QMYCall.init(Context ctx);

2.添加监听器

/**
* 添加连接监听器
* cl:监听器实例
*/ QMYCall.addConnectionListener(ConnectionListener cl);

3.移除监听器

/**
* 移除连接监听器
* cl:监听器实例
*/
QMYCall.removeConnectionListener(ConnectionListener cl);

4.连接服务器

/**
* 客户端连接到云平台,明文登录方式
*  accountSid 主账号id
*  accountToken 主账号token
*  clientNumber client账户(用户账户)
*  clientPwd client密码(用户)
*  clientPhone client电话号码
*  appId 应用ID
*/
QMYCall.connect(String accountSid, String accountToken,String clientNumber, String clientPwd, String clientPhone, String appId);

5.回拨接口

/**
* 回拨呼叫。回拨的主被叫号码需要规整为国际标准号码。
*  phone 被号的手机号码或标准座机号码
*  fromNum 呼叫主叫所要显示的号码(没有可以不传)
*  toNum 呼叫被叫所要显示的号码(没有可以不传)
*  @param allowedCallTime:最大通话时长(分钟为单位)
*  csl 回拨状态监听器
*/
QMYCall.callBack(String phone, String fromNum, String toNum, int allowedCallTime, CallBackListener csl);

6.添加电话监听器

/**
* 注册VoIP电话监听器 监听VoIP电话的各种状态
*  csl CallStateListener监听器实例
*/
QMYCall.addCallStateListener(CallStateListener csl);

7.移除电话监听器

/**
* 移除VoIP电话监听器
*  csl CallStateListener监听器实例
*/
QMYCall.removeCallStateListener(CallStateListener csl);

8.添加电话监听器

/**
* 发起直拨呼叫
*  mContext 当前程序上下文 ApplicationContext
*  calledNumber 被叫手机号码或Client号码
*  callType 呼叫类型
*  displayNumber 被叫显号
*/
QMYCall.dial(Context mContext, String calledNumber, String displayNumber,CallType callType);

9.挂断电话

/**
* 挂断直拨
*/
QMYCall.hangUp();

10.发送DTMF

/**
* 发送DTMF
*  mContext Context
*  keyCode CALL_SEND_DTMF_*
*/
QMYCall.sendDTMF(Context mContext, int keyCode);

11.更改扬声器状态

/**
* 设置扬声器
*  isSpeakerphoneOn false:关闭 true:打开
*/
QMYCall.setSpeakerphone(boolean isSpeakerphoneOn);

12.更改话筒状态

/**
* 设置静音
*  isMicMute true:静音  false:正常
*/
QMYCall.setMicMute(boolean isMicMute);

13.视频功能开关

/**
* 视频功能开关
*  isMicMute true:开启SDK视频功能  false:关闭SDK视频功能
*/
QMYCall.useVideo(boolean useVideo);

14.更新拔号选项(可以在音频通话中切换成视频通话或在视频通话中换成音频)

/**
* 更新拔号选项(可以在音频通话中切换成视频通话或在视频通话中换成音频)
* @param callId:通话ID
* @param VideoCall.START_VIDEO:切换成视频通话 VideoCall.STOP_VIDEO:切换成音频通话
*/ QMYCall.updateDialOptions(String callId,VideoCall videoCall);

15.开启视频

/**
* 开启视频
* @param mActivity:当前活动的Activity
* @param remoteLinearLayout:远程视频预览LinearLayout布局文件
* @param localLinearLayout:本地视频预览LinearLayout布局文件
* @param callId:通话ID
*/ QMYCall.openCamera(Activity mActivity, LinearLayout remoteLinearLayout, LinearLayout localLinearLayout,String callId);

16.关闭视频

/**
* 关闭视频
* @param mActivity:当前活动的activity
* @param remoteLinearLayout:远程视频预览LinearLayout布局文件
* @param localLinearLayout:本地视频预览LinearLayout布局文件
* @param callId:通话ID
*/
QMYCall.closeCamera(Activity mActivity, LinearLayout remoteLinearLayout, LinearLayout localLinearLayout,String callId);




回调涵数:

/**
* 连接成功的回调
*/
onConnectionSuccessful()

/**
* 连接失败的回调    常量CallStateListener.REGISTER_*
*/
onConnectionFailed(int reason)

/**
* 回拔成功的回调
*/
onCallBackSuccess()

/**
* 回拔失败的回调,reason根据官网状态码查询对应的问题
*/
onCallBackFailed(int reason)

/**
* 呼叫失败的回调
*callId:通话ID
*reasonCode:失败原因
*reasonDesc:描述
*/
过期回调涵数
onDialFailed(String callId, int reasonCode,String reasonDesc)

/**
*来电监听器
*callId:通话ID
*callerNumber:来电号码
*/
onIncomingCall(String callId, String callerNumber)

/**
*挂断电话回调
*callId:通话ID
*reason:挂断原因 参考常量CallStateListener.CALL_STATE_*
*/
过期回调涵数
onHangUp(String callId, int reason)

/**
*对方正在呼铃的回调
*callId:通话ID
*/
过期回调涵数
onAlerting(String callId)

/**
*接听回调
*callId:通话ID
*/
过期回调涵数
onAnswer(String callId)

/**
*话筒静音状态改变
*muteOn:是否话筒静音
*/
onMuteStateChanged(boolean muteOn)

/**
*扬声器状态改变
*speakerOn 开启:true, 关闭:false
*/
onSpeakerStateChanged(boolean speakerOn)

/**
*呼叫状态改变
*callId:通话ID
*state:参考常量CallStateListener.CALL_STATE_*
*videoChanged:是否改变成视频通话
*/
onCallStateChanged(String callId,boolean videoChanged,int state)

/**
*反回DTMF值
*callId 通话ID
*dtmf:参考常量CallStateListener.CALL_REC_DTMF_*
*/
onDTMF(String callId,int dtmf)



常量说明:
	// 错误
	CallStateListener.CALL_STATE_NULL
	// 正在呼叫
	CallStateListener.CALL_STATE_CALLING
	// 来电
	CallStateListener.CALL_STATE_INCOMING
	// 响铃中
	CallStateListener.CALL_STATE_RINNING
	// 正在连接
	CallStateListener.CALL_STATE_CONNECTING
	// 通话中
	CallStateListener.CALL_STATE_CONFIRMED
	// 挂断
	CallStateListener.CALL_STATE_DISCONNECTED
	//回拔成功
	CallStateListener.CALL_STATE_SUCCESS
	//SIP ID注册失败
	CallStateListener.REGISTER_INVALID_ID