有联云平台本着赠人玫瑰手留余香的心态推出以android为开发平台开放SDK接口及其demo供广大的开发者参考, 使用,方便有android研发基础的开发者快速了解平台功能,整合有联云接口,本部分对集成有联云SDK的应用 做出大纲解释,如需开发出个性化应用,需具备对android有着更深的造诣,有联云必将与你共同进步。
第一节. 快速体验
前期准备工作(必须)
第二节、集成SDK及配置指导
2.1 添加sdk到项目
(1):新建android工程将下载的SDK包中提供的ULinkSdkLib.jar包考贝到 libs目录下,及其SDK包中提供的armeabi,armeabi-v7a(如有intel CPU的需求,请包含x86), 文件夹考贝到android工程的libs目录下如下图所示。
(2):将拷入到lib包下的jar包加入到Build Path中操作结束后效果图如下:
2.2 在AndroidManifest.xml文件下添加权限和配置service和receiver
//添加如下权限 // 访问网络 <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> // 写SD卡 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> // 手机基本信息 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> // 非必须:拨打电话 <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" /> // 是否可以连接已匹配的蓝牙设备 <uses-permission android:name="android.permission.BLUETOOTH" /> // 重力感应 <uses-permission android:name="android.permission.VIBRATE" /> // 系统设置 <uses-permission android:name="android.permission.WRITE_SETTINGS" /> // wifi信号强弱 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> // 录音权限 <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> // 锁屏,电源管理 <uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.DEVICE_POWER" /> // 必要的服务与广播接收 <receiver android:name="com.ulink.sdk.api.AlarmReceiver" android:exported="false" > <intent-filter> <action android:name="com.ulink.sdk.api.action.alarm"/> </intent-filter> </receiver> <service android:name="com.ulink.sdk.api.ControllerService" ></service>
特别提示:请勿在AndroidManifest中配置如下属性,因为sdk最低系统要求是2.1 以上系统
android:minSdkVersion="5"
特别备注:针对Android6.0 API 23(含)以上的系统因为新增了动态权限的要求,所以SDK提供了如下工具类:
com.ulink.sdk.api.tools.PermissionUtils 本类提示了相关的特定API以供开发者方使请求,开发者开发中也能自行实现动态权限申请.API列表:
//用于检测用户是否允许指定权限 PermissionUtils.checkPermission(权限名); //用于用户拒绝指定权限后,是否有勾选上拒绝再提示 PermissionUtils.checkUserRefuse(Activity, 权限名); //用于请求本SDK默认需要的全部权限,会回调:Actity.onRequestPermissionsResult PermissionUtils.requestPermission(Activity,activity回调请求码); //用于请求本用户指定的权限列表,会回调:Actity.onRequestPermissionsResult PermissionUtils.requestPermission(Activity,activity回调请求码,权限数组);本SDK要使用到的动态特殊权限列表:
android.permission.RECORD_AUDIO问题表现:
如不允许,会出现声音设备不能启用,导致通话中没有声音,但不会导致SDK闪退
2.3 实现回调
在建立的service中实现以下接口InitListener,ConnectionListener,CallStateListener并且添加监听 ,实现回调
//ULSdkDemoService 为开发者使用actiivty或者服务 public class ULSdkDemoService extends Service implements InitListener,ConnectionListener,CallStateListener{ @Override public void onCreate() { super.onCreate(); //添加初始化监听器 ULSService.addInitListener(ULSdkDemoService.this); // 添加连接监听器 ULSService.addConnectionListener(ULSdkDemoService.this); // 添加电话监听器 ULSCall.addCallStateListener(ULSdkDemoService.this); } }
2.3.1 InitListener(初始化云平台接口) 接口回调如下
集成SDK连接平台是否成功 需在此处理相关业务逻辑
public class ULSdkDemoService extends Service implements InitListener { //初始化成功 public void onInitSuccessful() { } //初始化失败 public abstract void onInitFailed(ULSReason reason) { } // 释放成功 public abstract void onUnInitSuccessful() { } }
2.3.2实现ConnectionListener(连接云平台接口) 接口回调如下
集成SDK连接平台是否成功 需在此处理相关业务逻辑
public class ConnectionService extends Service implements ConnectionListener { @Override // 实现ConnectionListener 当连接失败回调该方法 public void onConnectionFailed(UcsReason arg0) { } @Override // 实现ConnectionListener 当连接成功回调该方法 public void onConnectionSuccessful() { } }
2.3.3 实现CallStateListener(电话监听状态接口) 接口回调如下
使用电话业务时此接口将监听电话状态 , 情景如: 来电 , 接听等 需在此处理相关逻辑
public class ULSdkDemoService extends Service implements CallStateListener { // 被叫响铃 public void onRingIng(String callId){ } // 呼叫振铃中,用于通知主叫,被叫在响铃 public void onAlerting(String callId){ } // 呼叫振铃中,用于通知主叫,被叫在响铃 public void onAnswer(String callId){ } // 呼叫来电 public void onIncoming(ULSCallIncomingInfo callInfo){ } // 对方挂机通知 public void onHangUp(String callId,ULSReason reason){ } // 呼叫错误通知 public void onCallFailed(String callId,ULSReason reason){ } // 准备发起呼叫 public void onCallReadyStart(String calledNumner){ } // 回调发起成功 public void onCallBackSuccess(String callId){ } // 取消回调成功 public void onCancelCallBackStatus(String callId,ULSReason reason){ } // 呼叫模块结束通知 public void onCallFinish(){ } }
2.4 初始化SDK平台
集成SDK使用时要先初始化SDK,执行后会通过:注册相关的初始化广播,进行回调通知初化是否成功还是失败
//方式一:先指定开发者ID、应用ID、是否开启日志,再初始化 ULSService.setDeveloper(String devId,String appId); ULSService.init(Context mContext, boolean logSwitch); //方式二:直接指定开者ID、应用ID、是否开始日志进行初始化 ULSService.init(Context mContext, String devId,String appId, boolean logSwitch);
2.5、连接/断开 云平台
集成SDK 使用以下两种方式连接云平台(使用平台能力前必须实现)
//指定子帐号ID,子帐号密码连接有联运通信平台 ULSService.connect(String clientId,String clientPwd);
2.6、断开云平台
当需要断开与云平台连接时,可通过调用 ULSService.uninit 该方法实现。其他关联方法请查看:Android初始化及配置接口
//断开有联云通信平台 ULSService.uninit();
2.7、ULSCall 电话业务核心类
ULSCall类主要针对VoIP、直拨、回拨等语音通话的使用场景,在这些功能统一封装在Android SDK jar包类内。您可以在IDE下通过调用不同类实现具体某一项功能。以下为具体代码片段:
//电话来电时接听电话 public static boolean answer(String callId) //挂断电话调用此方法 public static boolean hangUp(String callId) //挂断电话调用此方法(true代表免提,false代表内置) public static void setSpeakerphone(boolean isSpeakerphoneOn) //设置静音(true静音,false正常) public static void setMicMute(boolean isMicMute) //发起一个呼叫方式1(calledNumner:用户clientId或者手机号码;type:DIRECT->直拨,P2P->免费,AUTO->智能呼叫) public static void dial(Context mContext,ULSCallType callType,String calledNumner) //发起一个呼叫方式2(calledNumner:用户clientId或者手机号码;userData:P2P透传数据;type:DIRECT->直拨,P2P->免费,AUTO->智能呼叫) public static void dial(Context mContext,ULSCallType callType,String calledNumner,String userData) //回拨方式1( mContext:上下文,phoneNumber:被叫号码 ) public static void callBack(Context mContext,String phoneNumber) //回拨方式2( mContext:上下文,phoneNumber:被叫号码,fromSerNum:呼叫主叫所要显示的号码,toSerMum:呼叫被叫所要显示的号码) public static void callBack(Context mContext,String phoneNumber,String fromSerNum,String toSerMum) //设置需要显示的电话号码,phoneNumber:要显示的号码;在对方来电(VoIP电话或落地电话)上显示的号码;此功能需要服务器配置透传设置 public static void setSelfPhoneNumber(String phoneNumber)
2.8、相关类说明
所属类 | 状态码 | 事件类型 |
---|---|---|
ULSReason | public int getStateCode() | 返回状态码 |
public int getEventCode() | 返回事件码码,用于特殊功能事件代码,如:登录失败(状态码),用户密码不对(事件代码) | |
public String getMsg() | 返回消息内容,注:此功能暂时未开放 | |
ULSCallIncomingInfo | public String getCallId() | 获取呼叫ID |
public String getFromPhone() | 获取来电电话号码 | |
public String getClientId() | 获取客户端ID | |
public String getAttedData() | 获取透传用户数据(P2P才有) | |
ULSCallType | P2P | 点对点 |
DIRECT | 直拨 | |
AUTO | 自动直拨或者P2P(服务器进行路由) | |
CallBack | 回拨 |
2.9 集成SDK,打包混淆问题
请在 proguard.cfg 或 proguard-project.txt 等的混淆配置文件中,增加以下两项,以防混淆引起找不到相关类的问题
-keep class com.ulink.** {*;} -keep interface com.ulink.** {*;}如在android 6.0以下编译,请同时增加以下一句,以防编译警告导致编译失败:
-dontwarn com.ulink.**