Android开发指南

有联云平台本着赠人玫瑰手留余香的心态推出以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.**

想了解更多信息,请咨询QQ : 12925489

免费咨询