文档简介:
云手机Android SDK文档v1.5.5
云手机Android SDK主要功能是为APP赋予云手机使用能力,可以通过SDK连接云手机,完成对云手机的一系列操作。
简介
云游戏Android SDK 发行版包括aar包、javadoc文档、完整的Demo示例。以下使用表示SDK解压根目录。
- AAR文件:/aar,开发时导入
- mapping:/mapping,mapping文件
- javadoc文档:/javadoc,javadoc文档
- 示例项目源码:/demoSrc,完整的demo目录。帮助您快速熟悉开发SDK
- 示例项目APK:/demo.apk,demo apk
- 用户手册:本文档
运行环境
可运行于 Android 4.2( API Level 16) 及 以 上 版 本 。
SDK导入及配置
申请APPID
开发者请向运营申请创建App并获取sdk使用的appid和seckey。
####导入aar包 SDK包含gameboxlib-veriosn-xxx.aar和android-support-v4.jar,请将aar文件复制到项目libs目录,并根据如下代码配置build.gradle
android {
//android标签内添加aar目录
repositories {
flatDir {
dirs 'libs'
}
}
}
dependencies {
//添加依赖
compile fileTree(dir: 'libs', include: ['*.jar'])
compile(name: 'cloudphonelib-veriosn-xxx', ext: 'aar')
}
SDK权限配置
<uses-permission android:name="android.permission.INTERNET"
/> <uses-permission android:name="android.permission.
WRITE_EXTERNAL_STORAGE" /> <uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE"
/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"
/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
代码混淆
-keepattributes SourceFile,LineNumberTable,Signature -keepclasseswithmembernames
class * { native <methods>; } -keep class com.alibaba.fastjson.**
{ *; } -keep class com.redfinger.playsdk.fragment.**{*;} -keep
class com.redfinger.playsdk.widget.**{*;} -keep class com.gc.redfinger.** { *; }
SDK初始化
在Application的onCreate方法中调用如下代码完成初始化:
/**
* 初始化sdk
*
* @param ak appKey
* @param sk secKey
*/ public void init(String ak, String sk, String dc);
###切换pass服务,isNewPass为true使用新的pass,false使用老的,不传默认是使用新的.
useCache是否缓存云手机,会把token存在本地,下次连接直接通过本地token
/** * 初始化sdk * * @param ak appKey * @param sk secKey * @param sk isNewPass */ CloudPhoneManager.getInstance(this).init(appKey, secKey, YOUR_CHANNEL, true);
public void init(String ak, String sk, String dc, boolean isNewPass, boolean useCache)
云手机连接
申请云手机设备
通过CloudPhoneManager申请云手机设备,单个用户同时只能申请一台云手机设备。如申请设备成功则返回状态码:
APIConstants.APPLY_DEVICE_SUCCESS和DeviceControl用于控制设备,否则返回对应错误码。
/** * 根据申请云手机设备 * * @param vmcode 指定设备号,如不指定,则随机申请 * @param callback 异步回调 */ GameBoxManager.getInstance(this).applyCloudDevice(String vmcode,
@NonNull new APICallback<DeviceControl>(){ @Override public void
onAPICallback(DeviceControl deviceControl, int code) { //回调 } })
获取设备控制器
在申请过设备的情况下,每次重连云手机之前,调用此接口获取设备控制器,用于连接、操作云手机。
/** * 获取当前设备控制器 * @return */ public DeviceControl getDeviceControl() { if
(mDeviceInfo != null && (mDeviceControl == null ||
mDeviceControl.isReleased())) { mDeviceControl = new DeviceControlImpl(mContext, mDeviceInfo); } return mDeviceControl; }
启动云手机
在设备申请成功后,可使用返回的DeviceControl启动云手机。云手机界面需要添加到一个FragmentActivity中,
需要传入ViewGroup的id供添加云手机View。如返回状态码:APIConstants.CONNECT_DEVICE_SUCCESS则表示设备启动成功。
建议云手机界面全屏展示,参照demo中云手机界面
DeviceControl.startCloudPhone(@NonNull FragmentActivity activity, @IdRes int containerId, @NonNull
APICallback<String> callback)
退出云手机
通过设备控制器DeviceControl退出云手机是指断开当前设备连接,但是不会释放当前设备,下次可以继续连接。
/**
* 停止云手机连接,在退出的时候必须回调,否则无法进行下一次连接
*/ public abstract void stopCloudPhone();
释放云手机
通过CloudPhoneManager释放云手机设备,设备释放之后将无法继续连接,需要重新申请设备。
/**
* 释放云手机设备
* @param callback
*/ public void releaseCloudDevice(final APICallback<String> callback) ()
云手机操作
设置云手机监听
/**
* 设置云手机监听
* @param listener PlayListener 回调
*/ public abstract void setPlayListener(PlayListener listener); /**
* 云手机监听
*/ public interface PlayListener { /**
* 网络延时反馈
*
* @param ping 网络延时,单位ms
*/ void onPingUpdate(int ping); /**
* 无操作超时回调
*
* @param type 类型。1为后台,2为前台
* @param timeout 超时时长,单位s
* @return 返回true表示消耗了事件,sdk不处理超时逻辑;返回false表示未消耗事件,在倒计时结束后,sdk会停止连接
*/ boolean onNoOpsTimeout(int type, long timeout); }
设置前后台无操作超时
/**
* 设置无操作超时 (modifyed v1.5.3)
* @param foregroundTimeout 前台超时,单位s
* @param backgroundTimeout 后台超时,单位s
*/ public abstract void setNoOpsTimeout(long foregroundTimeout, long backgroundTimeout);
设置清晰度,更高的清晰度效果更加,但是相对消耗流量也更多。
/**
* 调整码率
* @param level 等级,目前支持5档
* {@link APIConstants#DEVICE_VIDEO_QUALITY_AUTO} 自动
* {@link APIConstants#DEVICE_VIDEO_QUALITY_HD} 高清
* {@link APIConstants#DEVICE_VIDEO_QUALITY_ORDINARY} 普通
* {@link APIConstants#DEVICE_VIDEO_QUALITY_HS} 一般
* {@link APIConstants#DEVICE_VIDEO_QUALITY_LS} 流畅
*/ public abstract void switchQuality(@APIConstants.VideoQuality String level);
设置声音开关
/**
* 云手机声音开关
* @param audioSwitch
*/ public abstract void setAudioSwitch(boolean audioSwitch);
按键指令发送 目前支持home、back、menu三个按键发送
/**
* 向设备发起控制命令
*
* @param command {@link APIConstants#DEVICE_COMMAND_HOME},{@link APIConstants#DEVICE_COMMAND_MENU},{@link
* APIConstants#DEVICE_COMMAND_BACK}
*/
public abstract void sendCommandToDevices(@APIConstants.DeviceCommand String command);
传感器采集
传感器采集,是将本地的传感器信息采集后发送到云手机上进行还原,达到本地与云手机一致。目前支持采集得传感器包含麦克风、摄像头、陀螺仪、加速器等。 备注: 1、麦克风和摄像头包含采集、编码、传输、还原、渲染等步骤,目前摄像头对480P(800*480)支持效果较好(1-2s),720p支持待优化。 2、音视频编码需要根据设备类型和需求进行适配,因此采集、编码需要开发者自行根据DEMO中hardware模块进行调整开发
传感器回调
在申请到设备之后,注册此监听,当云手机App使用到相关传感器之后,会进行回调。 回调包含:硬件ID(SensorConstants.CloudPhoneSensorId)、硬件状态(SensorConstants.SensorState)
/**
* 注册监听,接收硬件采集信息
*
* @param listener
*/ public abstract void registerSensorSamplerListener(SensorSamplerListener listener); /**
* 采集硬件信息回掉
*/ public interface SensorSamplerListener { /**
* 采集硬件信息状态发生变化
*
* @param sensor 硬件类型 @SensorConstants.CloudPhoneSensorId
* @param state 硬件状态 @SensorConstants.SensorState
*/ void onSensorSamper(@SensorConstants.CloudPhoneSensorId int sensor, @SensorConstants.SensorState int state); }
传感器数据发送
将本地数据发送至传感器,需要指定传感器类型和数据类型,具体参照DEMO
/**
* 发送硬件信息,此接口针对摄像头和麦克风数据
*
* @param type 硬件类型 @{@SensorConstants.CloudPhoneSensorId}
* @param type 数据@{@SensorConstants.CameraVideoType}
* @return
*/
public abstract void sendSensorInputData(@SensorConstants.CloudPhoneSensorId int sendor,
@SensorConstants.AudioType @SensorConstants.CameraVideoType int type,
byte[] data);
/**
* 发送硬件传感器信息,此接口针对陀螺仪、加速器、重力感应等传感器
* @param sendor 传感器id @{@SensorConstants.CloudPhoneSensorId}
* @param sensorType @{传感器类型 SensorConstants.SensorType}
* @param data 传感器数据参数
*/
public abstract void sendSensorInputData(@SensorConstants.CloudPhoneSensorId int sendor,
@SensorConstants.SensorType int sensorType,
float... data);
云手机信息修改
为了方便支持客户端同步设备信息,目前支持将IMEI、AndroidID同步到云手机上。 (added v1.5.3) 调用GameManager方法,在申请设备之进行设置。 备注:由于修改硬件信息为异步操作,成功率为99%
/**
* 设置云手机参数信息,需要在申请设备之前进行设置
*
* @param key 目前支持imei,androidid
* @param value
*/ public void addDeviceMockInfo(@APIConstants.MockInfo String key, String value) { mMockInfo.put(key, value); } /**
* 移除云手机参数信息
*
* @param key 目前支持imei,androidid设置
*/ public void removeDeviceMockInfo(@APIConstants.MockInfo String key) { mMockInfo.remove(key); }
DEMO示例集成
为了方便大家快速开发使用云游戏SDK,我们在SDK中附带了一个DEMO,供大家参考使用,可以根据DEMO稍做修改快速集成到自己的产品中。 DemoApplication : 将 onCreate中初始化sdk复制到产品自定义的Application完成初始化。 HomeActivity:主界面,包含一个云手机的界面,可以进行自定义。 GameRunningActivity:云手机连接界面,已经完成了出下载外的所有逻辑。
附录
状态码说明
代码 | 值 | 含义 |
---|---|---|
APPLY_DEVICE_SUCCESS | 1000 | 设备申请成功 |
CONNECT_DEVICE_SUCCESS | 1001 | 设备连接成功代码 |
RECONNECT_DEVICE_SUCCESS | 1002 | 设备重连成功 |
DISCONNECT_SUCCESS | 1011 | 断开成功 |
RELEASE_SUCCESS | 1012 | 释放成功 |
ERROR_API_CALL_ERROR | -1000 | API调用失败 |
ERROR_NO_DEVICE | -1001 | 无设备 |
ERROR_NETWORK_ERROR | -1002 | 网络错误 |
ERROR_DEVICE_EXPIRED | -1003 | 设备过期 |
ERROR_DEVICE_OTHER_ERROR | -1004 | 申请设备未知错误 |
ERROR_OTHER_DEVICE_RUNNING | -1005 | 有未释放的设备实例 |
ERROR_SDK_INIT_ERROR | -1006 | 播放SDK初始化失败 |
ERROR_APP_QUERY_ERROR | -1007 | 应用信息获取失败 |
ERROR_WAITING_QUEUE | -1008 | 游戏启动失败,正在排队 |
ERROR_OTHER_DEVICE_WAITING | -1009 | 有其他游戏正在排队,无法排队 |
ERROR_DEVICE_TOKEN_VALID_FAILED | -1010 | 通过DeviceToke跨进程重连错误 |
SDK提交记录
主版提交记录:
- 20190507: v1.0.0 首次提交
- 20210115: v1.5.5 云手机和云游戏sdk合并