安卓端SDK接入

安卓端SDK接入

1 基于移动云AK/SK认证

  签名认证

目前云手机产品使用移动云开放API能力进行统一调用,使用移动云AccessKey/SecretKey进行身份验证,详请参考移动云官网说明 https://ecloud.10086.cn/op-help-center/doc/article/24283

2 安卓SDK概述

本文档面向安卓开发者,用于指导开发者快速接入云手机SDK,开发自己的云手机产品。

重要提醒:所有的 SDK 操作都必须在应用成功授权之后才能继续执行。

 引入安卓SDK

2.1 安卓SDK下载

cloudphone_sdk_release_V2.1.1.aar

2.2 集成安卓SDK Demo下载

ecloudPhoneDemo.zip

2.3 引入安卓SDK的aar及三⽅依赖
//引入客户端 sdk :library:ecloud_clientsdk集成了cloudphone_sdk_release_V2.1.1.aar

implementation project(path: ':library:ecloud_clientsdk')
implementation 'com.blankj:utilcodex:1.31.1'
implementation 'com.github.li-xiaojun:XPopup:2.10.0'

AndroidManifest.xml ⾥⾯添加如下权限
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.READ_CALL_LOG"/>
<uses-permission android:name="android.permission.WRITE_CALL_LOG"/>
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
2.4 初始化SDK
public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        Log.e("MyApplication", "onCreate");

        CloudPhoneManager.Companion.getInstance().initSdk(this);
    }
}

3 功能接口说明

3.1 创建实例

• 接口介绍

fun getInstance(): ICloudPhone

• 功能描述

创建ClonePhone-SDK对象

• 调用示例

ICloudPhone cloudPhone = CloudPhoneManager.Companion.getInstance();

3.2 初始化SDK

• 接口介绍

fun in itSdk(application: Application)

• 功能描述

初始化SDK,一般在初始化阶段调

• 参数介绍

@param{application: Application}: application对象

• 调用示例

CloudPhoneManager.Companion.getInstance().initSdk(this);
3.3 获取云侧SDK版本号

• 接口介绍

fun getCloudVersion(): String

• 功能描述

获取云侧SDK版本号

• 调用示例

cloudPhone.getCloudVersion()
3.4 获取自身SDK版本号

• 接口介绍

fun getSelfVersion(): String

• 功能描述

获取自身SDK版本号

• 调用示例

cloudPhone.getSelfVersion()
3.5 更新 CloudphoneConfig

• 接口介绍

fun setCloudPhoneConfig(cloudPhoneConfig: CloudPhoneConfig?)

• 功能描述

更新 CloudphoneConfig

• 调用示例

cloudPhone.setCloudPhoneConfig(cloudphoneConfig);
3.6 获取 CloudphoneConfig

• 接口介绍

fun getCloudPhoneConfig(): CloudPhoneConfig?

• 功能描述

获取 CloudphoneConfig

• 调用示例

cloudPhone.getCloudPhoneConfig();

3.7 进入云手机(自定义UI场景)

• 接口介绍

fun startCloudPhone(viewGroup: ViewGroup, surfaceViewRender: MySurfaceViewRender,
cloudPhoneConfig: CloudPhoneConfig)

• 功能描述

进⼊云⼿机 ,适⽤于定制⾃定义UI场景 ,需要⾃⼰定制悬浮窗和底部导航栏UI及功能 

• 参数介绍

@param {ViewGroup} viewGroup:承载云手机画面的 viewgroup

@param{MySurfaceViewRender} surfaceViewRender: 画面surfaceViewRender 或TextureviewRender

@param {CloudPhoneConfig} cloudPhoneConfig:   进入云手机的配置,具体如下

CloudPhoneConfig参数如下:

参数

是否必选

参数类型

描述

instanceId

是

String

云手机ID

userId

 

是

String

客户端唯一id,若没有可以用instance + "\_uid"代替

deviceid

否

String

设备id,可以参考android唯一设备id

obsRegion

否

String

obs桶id

useHardware

否

Boolean

是否使用硬解码,默认为true

isSrsRequest

否

Boolean

是否是同屏互动请求,默认为false

streamUrl

否

String

同屏互动拉流地址,isSrsRequest为true时必传

sensorConfig

否

SensorConfig

传感器开关,具体配置见下表

cloudId

否

String

云手机订单id

token

否

String

用户token

mobile

否

String

手机号

phyWidth

否

Int

云机规格: 一般是720/1080,默认720

navResourceId

否

Int

导航栏资源id

webSocketUrl

是

String

信令地址,建连必须要用

enableLogToDebugOutput

否

Boolean

是否开启WebRtc调式日志,默认false

localSurfaceViewRender

否

MySurfaceViewRender

打开摄像头本地预览控件

videoParams

否

VideoParams

音视频配置参数,有默认值

cloudSdkVersion

否

int

云侧sdk版本号

appAndOSMessageController

否

IAppAndOSMessageController

跟os通信接口文件

microphoneUseDC

否

boolean

麦克风数据用dc传输,默认false

cameraUseDC

否

boolean

摄像头数据用dc传输,默认为false

muteEnable

否

boolean

音频禁音标识

traceId

否

string

会话id

stateReportDelay

否

Long

StateReport指标数据回调间隔时间

fecMode

否

Int(@FecMode)

Fec 配置,支持FecMode.noFec,FecMode.flexFec,FecMode.rsFec 三种

startCalMos

否

boolean

 

是否开启MOS计分;true表示开启;默认为false,不开启;配合云侧SDK下发的端到端时延数据来计算

calMosPoint

否

Int

接收到calMosPoint个端到端时延点开始计算一次MOS分;默认为12个点,也就是一分钟计算一次MOS分

isNeedReconnect

否

boolean

ICE建联失败时,是否自动重连;true表示开启自动重连;默认为false,不自动重连

reconnectMaxLimit

否

Int

最大重连次数限制;默认5次;第一次重连不设延时;第二次重连开始每次递增500ms

disconnectDelayTimeMillis

否

Long

建联超时时间,默认10s超时;设置为0则没有超时

idleReminderTimeMillis

否

Long

云机空闲时间设置,默认0s

SensorConfig参数如下:

参数

是否必选

参数类型

描述

isAccelerometerEnabled

否

Boolean

是否注册加速度传感器,默认false

isGyroscopeEnabled

否

Boolean

是否注册陀螺仪传感器,默认false

isMagneticFieldEnabled

否

Boolean

是否注册磁场传感器,默认false

isLightEnabled

否

Boolean

是否注册光线传感器,默认false

isProximityEnabled

否

Boolean

是否注册距离传感器,默认false

isPressureEnabled

否

Boolean

是否注册气压传感器,默认false

isTemperatureEnabled

否

Boolean

是否注册气温传感器,默认false

isRelativeHumidityEnabled

否

Boolean

是否注册湿度传感器,默认false

isStepCountEnabled

否

Boolean

是否注册计步传感器,默认false

• 调用示例

SensorConfig.Builder sensorConfig = new SensorConfig.Builder();
        sensorConfig.enableAccelerometer(cbAccelerometer.isChecked())
                .enableGyroscope(cbGyroscope.isChecked())
                .enableMagneticField(cbMagnetic.isChecked())
                .enablePressure(cbPressure.isChecked())
                .enableLight(cbLight.isChecked())
                .enableProximity(cbProximity.isChecked())
                .enableRelativeHumidity(cbRelativeHumidity.isChecked())
                .enableStepCount(cbStepCount.isChecked())
                .enableHeartRate(cbHeartRate.isChecked())
                .enableAmbientTemperature(cbAmbientTemperature.isChecked());

        CloudPhoneConfig.Builder builder = new CloudPhoneConfig.Builder();
        builder.cloudId(mAppDataStore.getString("cloudId", ""))
                .instanceId(mAppDataStore.getString("instanceId", ""))
                .userId(mAppDataStore.getString("userId", ""))
                .phyWidth(Integer.parseInt(mAppDataStore.getString("lbphyWidth", "720")))
                .useHardware(true)
                .manager(1)
                .enableLogToDebugOutput(cbLog.isChecked())
                .token(mAppDataStore.getString("token", ""))
                .webSocketUrl(mAppDataStore.getString("wsAddress", ""))
                .sensorConfig(sensorConfig.build())
                .cameraUseDC(false)
                .deviceId(AndroidUtil.getAndroidID(this))
                .startCalMos(true)
                .isNeedReconnect(true)
                .reconnectMaxLimit(10)
                .idleReminderTimeMillis(10000)
                .calMosPoint(12)
                .enableWebsocketSSL(false);

        // 启动云手机
        cloudPhone.startCloudPhone(rlContainer, textureView, builder.build());
3.8 退出云手机

• 接口介绍

fun exitCloudPhone()

• 功能描述

退出云手机

• 调用示例

cloudPhone.exitCloudPhone()
3.9 重连云手机

• 接口介绍

fun reStartCloudPhone()

• 功能描述

重连云手机

• 调用示例

cloudPhone.reStartCloudPhone()
3.10 按键注⼊

• 接口介绍

fun injectKeyEvent(keyCode: Int, action: Int)

• 功能描述

按键注⼊

• 参数介绍

@param{keyCode}: Int:Android按键的keyCode @param{action:} Int: Android按键的action

• 调用示例

cloudPhone.injectKeyEvent(KeyEvent.KEYCODE_BACK, KeyEvent.ACTION_DOWN);
cloudPhone.injectKeyEvent(KeyEvent.KEYCODE_BACK, KeyEvent.ACTION_UP);
3.11 静音

• 接口介绍

fun mute()

• 功能描述

静音

• 调用示例

cloudPhone.mute()
3.12 取消静音

• 接口介绍

fun unMute()

• 功能描述

取消静音

• 调用示例

cloudPhone.unMute()
3.13 设置视频参数

• 接口介绍

fun setVideoConfig(videoParam: VideoParams)

• 功能描述

设置视频参数

• 参数介绍

@param {VideoParams} videoParam: 视频参数 ,见下表

参数名

是否必须

参数类型

描述

约束

bitrate

否

int

码率

最小不小于 1,000,000,最大不超过 10,000,000(单位:bps)

gopSize

否

int

I 帧间隔

建议/一般为 10 的倍数

profile

否

int

编码复杂度

0:BASELINE<br>1:MAIN<br>2:HIGH

frameRate

否

int

帧率

建议/一般为 30 的整数倍(如 30、60、90 等)

• 调用示例

videoParams.bitrate= 4000000;
cloudPhone.setVideoConfig(videoParams);
3.14 云机音量调节

• 接口介绍

fun setAudioVolume(volume: Int, isForeground: Boolean)

• 功能描述

云机音量调节

• 参数介绍

@param {Int} volume: 音量

@param {Boolean} isForeground: 应用是否在前台

• 调用示例

cloudPhone.isForeground(5, true)

•3.15 注册连接状态监听

• 接口介绍

fun registerCloudPhoneStateListener(cloudPhoneStateListener: CloudPhoneStateListener?)

• 功能描述

注册连接状态监听

• 参数介绍

@param {CloudPhoneStateListener} cloudPhoneStateListener: 云手机连接状态回调

• 调用示例

cloudPhone.registerCloudPhoneStateListener(new CloudPhoneStateListener() {
            @Override
            public void onP2PConnected() {
            // 也可以通过onConnectStatusChange的connectStatus=0判断
            }

            @Override
            public void onP2PConnectFailed() {
            // ice建联失败 ,回调跟⾃动重连有关;设置了⾃动重连 ,ice建联失败后会执⾏⾃动重连逻辑, 不会回调该⽅     
            // 法;如果没有设置⾃动重连 ,则⽴⻢回调该⽅法;
            }

            @Override
            public void onFirstFrameRendered() {
            // 也可以通过onConnectStatusChange的connectStatus=1800
            }

            @Override
            public void onSocketSuccess(CloudPhoneConfig cloudPhoneConfig) {
            // 也可以通过onConnectStatusChange的connectStatus=201判断
            }

            @Override
            public void onDataChannelConnected() {
            }

            @Override
            public void onConnectStatusChange(int connectStatus) {
                super.onConnectStatusChange(connectStatus);
          
            }

            @Override
            public void onPhoneConnectError(int errorCode, String errorMsg) {
            }

            @Override
            public void registerOnCameraPermListener(boolean isRecord, CameraPermListener listener) {
             // 摄像头权限动态申请   
            }

            @Override
            public void registerOnMicroPhonePermListener(CameraPermListener listener) {
            // 麦克风权限动态申请
            }

            @Override
            public void onShowLoadingAnim() {
              // 处于后台⼀定时间后会断视频流,重新恢复视频流的时候需要动画弹窗提⽰
            }

            @Override
            public void onKickEachOther() {
            // 当云机被踢下线后,会调⽤该⽅法,可以执⾏退出云机操作并提醒⽤户
                ToastManager.toast(this, "您的云机已在其他设备登录,当前连接已断开");
            }

            @Override
            public void onPhoneIdleReminderTip() {
            //云机空闲提醒,空闲时间由CloudPhoneConfig.idleReminderTimeMilis控制
                ToastManager.toast(this, "您的云机很久没有操作,是否断开?");
            }
        });

connectStatus 状态码如下:

connectStatus

描述

说明

-2

连接超时

默认 10 s 连接超时,可通过 CloudPhoneConfig.disconnectDelayTimeMillis 自定义超时时间

-1

初始化状态

 

0

连接断开

请检查请求参数是否正确

1

连接成功

 

200

开始连接信令

 

201

信令连接成功

 

202

信令连接关闭

请检查信令服务是否正常

203

信令连接失败

请检查信令服务是否正常

300

开始连接 p2p

 

301

创建answer sdp失败

 

302

创建offer sdp失败

 

303

p2p建连失败

请检查网络是否正常

304

收到offer

 

305

发送answer

 

306

收到candidate

 

1001

云机不支持同屏共享

 

1002

控制端不存在

 

1003

鉴权失败

请检查token是否过期

1004

分辨率异常

 

1800

首帧到达

 

2001

消息格式错误

 

2002

云机不在线

请检查云机sdk是否正常运行

请检查请求参数是否正确

2003

云机获取公网地址端口失败

 

2004

云机信令连接失败

 

2005

云机ice连接失败

 

2006

云机底层内部错误

 

2007

云机首帧出流失败

 

2008

云机同屏共享超过人数限制

 

2009

云机同屏共享失败,内部问题

 

2010

云机同屏共享主控上线,踢出共享端

 

3000

云机被占用

请检查云机是否正在串流

请检查互踢逻辑是否生效

4001

共享端被踢出房间

 

3.16 解注册云手机状态监听

• 接口介绍

fun unRegisterCloudPhoneStateListener(cloudPhoneStateListener: CloudPhoneStateListener?)

• 功能描述

解除注册连接状态监听

• 参数介绍

@param {CloudPhoneStateListener} cloudPhoneStateListener: 云⼿机连接状态回调

• 调用示例

cloudPhone.unRegisterCloudPhoneStateListener(cloudPhoneStateListener);
3.17 注册云机⾳量变化监听

• 接口介绍

fun registerVolumeListener(context: Context, volumeChangeListener: VolumeChangeListener)

• 功能描述

注册云机⾳量变化监听

• 参数介绍

@param {VolumeChangeListener} volumeChangeListener: ⾳量变化监听

• 调用示例

cloudPhone.registerVolumeListener(this, new VolumeChangeListener() {
            @Override
            public void onVolumeChanged(int i) {
                
            }
        });
3.18 解注册云机⾳量变化监听

• 接口介绍

fun unregisterVolumeListener()

• 功能描述

解除注册云机⾳量变化监听

• 调用示例

cloudPhone.unregisterVolumeListener();
3.19 获取音量大小

• 接口介绍

fun getVolumeChangeObserver() : VolumeChangeObserver?

• 功能描述

获取音量大小

• 调用示例

cloudPhone.getVolumeChangeObserver();
3.20 注册方向变化监听

• 接口介绍

fun registerOnOrientationChangeListener(listener: CloudPhoneOrientationChangeListener?)

• 功能描述

注册方向变化监听:1 横屏 0 竖屏

• 参数介绍

@param{CloudPhoneOrientationChangeListener listener}:
interface CloudPhoneOrientationChangeListener { fun onOrientationChange(orientation: Int)
}

• 调用示例

cloudPhone.registerOnOrientationChangeListener(new CloudPhoneOrientationChangeListener() {
            @Override
            public void onOrientationChange(int orientation) {
                dragView.setRotation(orientation == 1 ? 90f : 0f);
            }
        });
3.21 注册接收云机消息监听

• 接口介绍

fun registerCloudPhoneMessageListener(cloudPhoneMessageListener: CloudPhoneMessageListener?)

• 功能描述

注册接收云机消息监听

• 参数介绍

@param {VolumeChangeListener} volumeChangeListener: 音量变化监听

• 调用示例

cloudPhone.registerCloudPhoneMessageListener(new CloudPhoneMessageListener() {
            @Override
            public void onReceiveCloudMessage(String message) {
                Log.d(TAG, "onReceiveCloudMessage: " + message);
            }
        });

消息type

说明

示例

5006

收到互踢消息

{"message":{"quit":true},"msgid":0,"timestamp":0,"type":5006}

3.22 发送消息到云机

• 接口介绍

fun sendDataToCloudPhone(data: String)

• 功能描述

发送消息到云机

• 参数介绍

@param{String} data: 要发送的数据
发送格式定义:
@param type: Int 消息类型
@param message: String 消息内容

• 调用示例

String json = "";
cloudPhone.sendDataToCloudPhone(json)
• 发送格式定义:
@param type: Int 消息类型
@param message: String 消息内容

协议名

消息 type

方向

协议说明

cloud_app_config

6001

双向

OS 向 APP 请求设备信息,APP 返回设备信息
例:{"type":6001,"message":""}

sim_card

6002

双向

OS 请求手机卡号码及和多号工作号,APP 回传
例:{"type":6002,"message":"xxx"}

clipboard

6003

双向

OS ⇄ APP 互传剪贴板内容
message 直接放字符串,去掉内层嵌套

volume_sync

6004

双向

OS ⇄ APP 声音同步

call

6005

单向(OS→APP)

OS 下发拨打电话指令

insert_call_record

6006

单向(APP→OS)

APP 上报当前通话记录

sms

6007

单向(OS→APP)

OS 下发发送短信指令

sms_permission

6008

单向(APP→OS)

APP 回传短信发送成功/失败结果

addShortCut

6010

单向(OS→APP)

 OS 下发添加快捷方式信息

openOsApp

6011

单向(APP→OS)

APP 通知 OS 打开云机内某应用

navigation_bar_color

6013

单向(OS→APP)

OS 下发状态栏颜色设置

battery

6014

单向(APP→OS)

APP 上报电池电量信息

flash_light

6015

单向(OS→APP)

OS 下发手电筒开关状态

vibrator

6016

单向(OS→APP)

OS 下发震动指令

sensor

6017

单向(APP→OS)

APP 上报传感器数据

gps

6018

单向(APP→OS)

APP 上报 GPS 信息

permission_status_post

6010

单向(APP→OS)

APP 上报各权限授权状态

ysj_salt_property

6020

单向(APP→OS)

APP 设置云机系统属性

open_page_path

6021 双向

OS ⇄ APP 打开网页或原生页面

os_app_top

6026

单向(OS→APP)

OS 通知当前栈顶应用包名

broadcast_post

6027 双向

OS ⇄ APP 互发广播(发送/接收)

• 发送/接受数据模版
1 // registerCloudPhoneMessageListener的onReceiveCloudMessage⽅法⾥监听云机消息回调, 
{"type": xxxx, "message": ""}

• 发送设备信息
{"type":6001,"message":"{\"config\":
{\"user_id\":\"17321\",\"mobile\":\"18301052458\",\"platform\":\"Android\",\"cloud_model\":\"basic\",\"ch
annel\":\"0\",\"cic_phone\":\"\",\"timestamp\":1720428870326,\"app_version\":\"1.0.0\",\"resolution\":
{\"real_width\":1080,\"real_height\":2340,\"real_status_bar\":81,\"real_navigation_bar\":120},\"notch\":
{\"status_bar_height\":81,\"is_status_bar_visible\":false,\"notchSize\":
{\"left\":0,\"top\":0,\"right\":0,\"bottom\":0}},\"controller.login.mode\":\"\",\"controller.auth.version
\":2},\"Authorization\":\"\",\"appVersion\":\"1.0.0\"}"}

• 发送SIM卡信息
 {"type":6002,"message":"{\"mobiles\":{\"sim_mobile\":[{\"carrierName\":\"中国移动
\",\"loginStatus\":0,\"subPhone\":\"18888888888\",\"type\":0}]},\"sim1\":\"{\\\"carrierName\\\":\\\"中国移动\\\",\\\"loginStatus\\\":0,\\\"subPhone\\\":\\\"18888888888\\\",\\\"type\\\":0}\",\"sim2\":\"null\"}"}
• 接收SIM信息
// OS打开电话、短信时触发
{"message":"","type":6002}

• 发送剪贴板数据
// type 6003 为剪贴板类型
{"type":6003,"message":"坚持党的全⾯领导是根本保证"}
• 接收剪贴板数据
//接收6003的type消息类型为云机剪贴板数据
{"message":"ALN-AL00 4.0.0.165(C00E155R4P16)","type":6003}
• 接收拨打电话数据
 {"message":"{\"number\":\"10086\",\"tag\":0,\"callType\":0,\"caller\":\"18888888888\"}","type":6005}
• 发送当前通话记录
{"type":6006,"message":"{\"number\":\"10086\",\"dateLong\":1720443577979,\"duration\":5,\"callType\":2}"}
• 接收短信数据
 {"message":"{\"content\":\"查话费
\",\"myPhoneNumber\":\"18888888888\",\"sendPhoneNumber\":\"10086\"}","type":6007}

• 发送短信发送成功或者失败的结果
{"type":6008,"message":"false"}

• 发送添加快捷⽅式信息
{"message":"
{\"pkg\":\"com.cbcc.wallpaper\",\"cls\":\"com.cbcc.wallpaper.ui.cloud.SplashActivity\",\"icon\":\"base64x xxxx\", \"name\":\"图库\"}", "type": 6010}
• 发送电池信息
{"type":6014,"message":"
{\"batteryStatus\":5,\"batteryHealth\":2,\"batteryLevel\":100,\"batteryVoltage\":4344,\"batteryTemperatur
e\":350,\"batteryTechnology\":\"Li-
poly\",\"batteryPlugged\":2,\"batteryPresent\":true,\"maxChargingCurrent\":0,\"maxChargingVoltage\":0,\"b
atteryCurrent\":450195,\"batteryCycleCount\":2,\"batteryFullCharge\":3081000,\"batteryChargeCounter\":200
0,\"batteryCapacityLevel\":-1,\"batteryChargeTimeToFullNowSeconds\":-1,\"batteryPropertyCapacity\":100,\"
batteryPropertyCurrentNow\":0,\"batteryCapacity\":3400}"}
• 接收⼿电筒开关状态信息
{"message":"false","type":6015}
• 发送云机属性
{"type":6020,"message":"{\"ysj_salt\":[{\"salt_key\":\"ysj_brand\",\"salt_value\":\"HUAWEI\"},
{\"salt_key\":\"ysj_manufacturer\",\"salt_value\":\"HUAWEI\"},
{\"salt_key\":\"ysj_security_openid\",\"salt_value\":\"184197\"},
{\"salt_key\":\"ysj_security_salt\",\"salt_value\":\"1720446497356\"},
{\"salt_key\":\"controller.cheat.nettype\",\"salt_value\":\"false\"},
{\"salt_key\":\"ysj_security\",\"salt_value\":\"97eec1ca4cb8d88e09c834417367dec039860d41442ada2870a44e087
cb0bff3\"},{\"salt_key\":\"ysj_model\",\"salt_value\":\"POT-AL00a\"}]}"}
• 接收栈顶信息
{"message":"{\"packageName\":\"com.huawei.browser\"}","type":6026
3.23 发送传感器数据到云机

• 接口介绍

fun sendVirtualDeviceData(deviceId: Int, optType: Int, data: Map<String, Any>?)

• 功能描述

发送传感器数据到云机

• 参数介绍

@param{Int} deviceId: 传感器类型 0x0加速度 0x1陀螺仪 0x2磁场 0x3光线 0x4距离 0x5压⼒ 0x6计步步数 0x7湿度 0x8 温度 0x9计 步触发 0xoa gps
@param{Int} optType: 操作类型 0x1 使能 0x2禁⽌使能 0x10 数据 @param{Map<String, Any>} data 传感器数据 xyz accuracy

• 调用示例

try {
        Map<String, Object> sensorData = new HashMap<>();
        sensorData.put("x", event.values[0]);
        sensorData.put("y", event.values[1]);
        sensorData.put("z", event.values[2]);
        sensorData.put("accuracy", event.accuracy);
        sendSensorDataToCloudPhone(0, 1, sensorData);   
    } catch (Exception e) {
        Log.e(TAG, "Failed to process sensor data: " + e.getMessage());
    }
3.24 gps模拟定位

• 接口介绍

fun mockGps(map: Map<String, Any>)

• 功能描述

gps模拟定位

• 参数介绍

参数

说明

是否必须

longitude

经度

是

latitude

纬度

是

altitude

海拔

是

speed

表示当前的移动速度,单位:米每秒,[0,400]米每秒

是

bearing

当前的移动导向角单位:度。范围[0,360)度

是

accuracy

表示当前的定位精度,单位:米。取值 ≥ 0

是

• 调用示例

HashMap&lt;String, Object&gt; gps = new HashMap&lt;&gt;();
gps.put("longitude", Double.parseDouble(longitude));
gps.put("latitude", Double.parseDouble(latitude));
cloudPhone.mockGps(gps);
3.25 重置云机物理分辨率

• 接口介绍

/**
*重置云机物理分辨率,固定视频流分辨率(⽐如需要固定出720x 1280规格的视频流)时可调⽤ 该⽅法;需要注意视频流分辨率的宽⾼⽐例最好跟SurfaceView控件宽⾼⽐例—样
*@paramvideoWidth视频流宽度
*@paramvideoHeight视频流⾼度
**/
fun resetPhysicalResolution(surfaceWidth: Int, surfaceHeight: Int)

• 功能描述

重置云机物理分辨率

• 参数介绍

@param{Int} videoWidth: 视频流宽度  @param{Int} videoHeight: 视频流⾼度
@param{Int} surfaceWidth: 物理分辨率宽度 宽度为8的倍数   @param {Int} surfaceHeight: 物理分辨率⾼度 ⾼度为8的倍数

• 调用示例

cloudPhone.resetPhysicalResolution(1080, 1920);
3.26 获取统计信息

• 接口介绍

fun getStateReport(): StateReport?

• 功能描述

获取统计信息

• 调用示例

cloudPhone.getStateReport();
3.27 恢复播放

• 接口介绍

/**
 * 恢复视频流
 * @param videoSink 视频控件
 * @param isAudioEnable 音频是否可用
 */
fun resumeRemoteVideoStream(videoSink: VideoSink?, isAudioEnable: Boolean)

• 功能描述

恢复视频播放功能

• 调用示例

cloudPhone.resumeRemoteVideoStream(textureView, false);
3.28 暂停播放

• 接口介绍

/**
 * 暂停视频流
 * @param videoSink 视频控件
 * @param delayTimestamp 延时多长间隔暂停,默认为0,即不延时
 */

fun pauseRemoteVideoStream(videoSink: VideoSink?, delayTimestamp: Long = 0L)

• 功能描述

暂停视频播放功能

• 调用示例

cloudPhone.pauseRemoteVideoStream(textureView, 10 * 1000);
3.29 云机截图

• 接口介绍

/**
 * 云机内截屏
 * 图片保存路径在 /sdcard/Pictures/
 * 以 Screenshot_" + date + ".png 命名
 */
fun screenCap()

• 功能描述

云机内截图功能

• 调用示例

cloudPhone.screenCap();
3.30 注册同屏共享消息监听

• 接口介绍

fun registerCloudPhoneSrsListener(listener: CloudPhoneSrsListener?)

• 功能描述

注册同屏共享消息监听

• 调用示例

cloudPhone.registerCloudPhoneSrsListener(new CloudPhoneSrsListener() {
            @Override
            public void onSrsShowNav(boolean b) {
            // *接收到主控端导航栏隐藏或打开消息    
            // isShowtrue - 导航栏显⽰false - 导航栏隐藏
            }

            @Override
            public void onUserEnter(@Nullable String s, @Nullable String s1) {
            //收到⽤户加⼊同屏共享 */
            }

            @Override
            public void onUserExited(@Nullable String s, @Nullable String s1) {
            //*收到⽤户退出同屏共享 */
            }

            @Override
            public void onSrsRoleChange(int i) {
            ///*收到⽤户角⾊权限变更消息
            // SrsUserBean.ROLE_ADMIN -主控端 
            // SrsUserBean.ROLE_MANAGER -管理端 
            // SrsUserBean.ROLE_SEEKER -观众            
            }

            @Override
            public void onMainControllerShowNav(boolean b) {
            //*主控端接收到共享端导航栏隐藏或打开消息
            //*@param isShowtrue - 导航栏显⽰false - 导航栏隐藏 */
            }

            @Override
            public void onSrsUserListChange(@Nullable ArrayList&lt;SrsUserBean&gt; arrayList) {
            //同屏互动⽤户列表更新
            }

            @Override
            public void onRoomKickOut(@Nullable String s) {
            //踢出房间
            }
        });
3.31 主控端显⽰或隐藏导航栏

• 接口介绍

fun srsMainControllerShowNav(isShow: Boolean)

• 功能描述

主控端显⽰或隐藏导航栏 ,在主控端显⽰或隐藏导航栏的时候 ,需要调⽤该⽅法通知共享端

• 调用示例

cloudPhone.srsMainControllerShowNav(true);
3.32 共享端请求显⽰或隐藏导航栏

• 接口介绍

fun srsShareShowNav(isShow: Boolean)

• 功能描述

共享端请求显⽰或隐藏导航栏 ,在共享端显⽰或隐藏导航栏的时候 ,需要调⽤该⽅法通知主控端去隐藏或显⽰导航栏 ,通知调整视频分辨率

• 调用示例

cloudPhone.srsShareShowNav(true);
 
3.33 更新 SurfaceView 或者 TextureView

• 接口介绍

fun updateSurfaceView(videoSink: VideoSink?)

• 功能描述

更新 SurfaceView 或者 TextureView

• 调用示例

CloudPhoneManager.Companion.getInstance().updateSurfaceView(surfaceView );
3.34 云机内切换到其它云机

• 接口介绍

fun switchCloudPhone(cloudPhoneConfig: CloudPhoneConfig)

• 功能描述

在云机内想切换到其它云机 ,通过获取当前 CloudPhoneConfig 对象 ,更新 cloudId、instanceId 等必要信息 ,调⽤该⽅法可 以做到切换云机功能。

• 调用示例

CloudPhoneConfig cloudPhoneConfig = CloudPhoneManager.Companion.getInstance().getCloudPhoneConfig();
if (cloudPhoneConfig == null) {
    return;
}
cloudPhoneConfig.setCloudId("dsahjhjsdahjkas");
cloudPhoneConfig.setInstanceId("22121122151d34624b12caebaed3c5b26");
cloudPhoneConfig.setPhyWidth(1080);
CloudPhoneManager.Companion.getInstance().switchCloudPhone(cloudPhoneConfig);

 

 
本文档内容整理自移动云官方帮助中心(查看原文),仅供参考。