API接口说明

本文档描述了云手机 Android 客户端 SDK 提供的接口。
你也可以参考示例项目open in new window,了解更完整的项目实现。

API概览

初始化

方法名方法描述
prepare初始化ArmCloudEngine

状态

变量名变量描述
engineState获取当前引擎状态

生命周期

方法名方法描述
start启动云机
resume恢复从云机拉流
pause暂停从云机拉流
stop停止云机
onRequestPermissionsResult权限自动处理

功能控制

方法名方法描述
screenShot截图
videoStreamProfileId设置云机清晰度
rotate旋转本机屏幕方向
muteAudio是否禁用音频
muteVideo是否禁用视频
enableLocalKeyboard是否开启本地键盘
enableLocationService是否启用定位功能
enableGyroscopeSensor是否启用陀螺仪功能
enableAccelerometerSensor是否启用重力感应功能
enableVibrator是否启用震动功能
enableCamera相机权限
enableMic麦克风权限
setLocationServiceMode设置定位模式
getLocationServer获取位置服务
getClipBoardServiceManager获取剪切板控制器
switchCamera切换前后摄像头
sendKeyEvent发送模拟按键事件
autoRecycleTime设置无操作回收服务时间 默认300s
getAutoRecycleTime获取无操作回收服务时间
streamType设置拉流类型: 拉视频/音频
updateVideoRenderMode更新视频流渲染模式
setVideoRotationMode设置视频旋转模式
getStatus获取当前播放状态
getMessageChannel获取消息透传控制器
getUploadManager获取文件上传控制器
getLocalInputManager获取本地键盘与云机应用控制器

设置监听

方法名方法描述
setStreamProfileChangeListener设置清晰度切换回调监听
setAutoRecycleTimeCallback设置无操作回收服务时长的回调监听
setScreenShotCallBack设置本地截图回调监听
setLocationEventListener设置定位回调监听

API详情

初始化

初始化ArmCloudEngine

方法:
ArmCloudEngine.prepare(mContext: Application, cloudCoreManagerStatusListener: ICloudCoreManagerStatusListener)
参数:

mContext :应用的上下文对象 cloudCoreManagerStatusListener: 初始化回调

示例代码:
class MyApp : Application() {

	override fun onCreate() {
		super.onCreate()
		ArmCloudEngine.prepare(this, object : ICloudCoreManagerStatusListener {
			override fun onPrepared() {
				Log.i("ArmCloudEngine", "初始化完成")
			}
		})
	}
}

状态

获取引擎状态

变量名:
ArmCloudEngine.engineState
变量描述:

类型: int@EngineState 描述: 当前引擎状态 EngineState :

字段名描述
STATE_AVAILABLE引擎可用
STATE_UN_AVAILABLE引擎不可用

注: 在调用start方法之前,请保证引擎状态为可用

生命周期

启动云机

方法:
ArmCloudEngine.start(config PhonePlayConfig, playerListener IPlayerListener)
参数:

config :初始配置信息 playerListener:拉流播放状态回调监听

config 字段描述如下:

字段名字段类型是否必填字段描述
contextFragmentActivity当前Activity上下文
tokenString请求加入房间凭证
userIdString用户id
clientTypeString客户端类型
padCodeString云端推流Code
containerViewGroup画面显示容器
enableMultiControlboolean是否开启群控
padCodesList群控云机编号集合
videoStreamProfileIdint清晰度 默认高清
enableGyroscopeSensorboolean是否启用传感器功能
enableAccelerometerSensorboolean是否启用重力感应功能
enableVibratorboolean是否启用震动功能
enableLocationServiceboolean是否启用定位服务功能
enableLocalKeyboardboolean是否启用本地键盘功能
enableClipboardCloudPhoneSyncboolean是否启用云机剪切板同步至真机
enableClipboardLocalPhoneSyncboolean是否启用真机剪切板同步至云机
enableCameraboolean是否开启摄像头权限
enableMicboolean是否开启麦克风权限
autoRecycleTimeint超时自动停止服务时间 默认300s
streamTypeString@StreamType拉流类型 默认拉取音视频
remoteLocationMockLocationInfo位置信息
rotationString@ScreenRotationType本机屏幕旋转方向 默认竖屏
videoRenderModeint@VideoRenderMode视频流渲染模式 默认自适应
videoRotationModeint@VideoRotationMode屏幕旋转模式 默认外部处理旋转
streamListenerIStreamListener视频流监听
字段类型信息:

StreamType:

字段名描述
TYPE_VIDEO视频
TYPE_AUDIO音频
TYPE_BOTH音视频

ScreenRotationType:

字段名描述
TYPE_LANDSCAPE横屏
TYPE_PORTRAIT竖屏

VideoRenderMode:

字段名描述
VIDEO_RENDER_MODE_COVER画面短边撑满容器
VIDEO_RENDER_MODE_FIT画面等比缩放居中显示于 Container
VIDEO_RENDER_MODE_FILL非等比拉伸画面并充满整个 Container

VideoRotationMode:

字段名描述
EXTERNALEXTERNAL 外部旋转,默认值;此模式下,用户需通过监听 IStreamListener#onRotation(int) 回调,从外部调整页面方向从而实现画面方向与云手机实例同步
INTERNALINTERNAL,内部旋转;此模式下,SDK 内部对画面进行方向处理,外部不需要做任何画面方向的处理
流媒体 ConnectionState :
字段名描述
CONNECTION_STATE_DISCONNECTED1连接断开超过 12s,此时 SDK 会尝试自动重连。
CONNECTION_STATE_CONNECTING2首次请求建立连接,正在连接中。
CONNECTION_STATE_CONNECTED3首次连接成功。
CONNECTION_STATE_RECONNECTING4涵盖了以下情况: 首次连接时,10 秒内未连接成功; 连接成功后,断连 10 秒。自动重连中。
CONNECTION_STATE_RECONNECTED5连接断开后,重连成功。
CONNECTION_STATE_LOST6处于 CONNECTION_STATE_DISCONNECTED 状态超过 10 秒,且期间重连未成功。SDK 仍将继续尝试重连。
CONNECTION_STATE_FAILED7连接失败,服务端状态异常。SDK 不会自动重连,请重新进房,或联系技术支持。
P2P ConnectionState :
字段名描述
STATE_NEW10初始化
STATE_CHECKING11连接中
STATE_CONNECTED3连接成功
STATE_FAILED7连接失败
STATE_COMPLETED14连接完成。
STATE_DISCONNECTED15连接断开
STATE_CLOSED16连接关闭
示例代码:
        val builder: PhonePlayConfig.Builder = PhonePlayConfig.Builder()
        builder.context(this)
            .userId(dto.userId) //必填参数 自定义客户端用户 ID
            .padCode(dto.padCode) // 必填参数, 云手机实例 ID
            .token(dto.token) // 必填参数,临时鉴权 token
            .clientType(dto.clientType) //必填参数 客户端类型
            .container(container) // 必填参数,用来承载画面的 Container, 参数说明: layout 需要是 FrameLayout 或者 FrameLayout 的子类
            .enableMultiControl(isMultiControl) // 选填参数 是否开启群控
            .setPadCodes(mChosePadCodes) // 选填参数 群控设备号集合
            .rotation(rotation) // 选填参数 屏幕的横竖屏 默认竖屏
            .videoStreamProfileId(
                videoStreamProfileId.definition,
                videoStreamProfileId.frameRate,
                videoStreamProfileId.bitrate
            ) // 选填参数,清晰度档位ID 默认高清
            .enableGyroscopeSensor(enableGyroscopeSensor) // 选填参数 打开陀螺仪开关 默认false
			.enableAccelerometerSensor(enableAccelerometerSensor) // 选填参数 打开重力感应开关 默认false
            .enableVibrator(enableVibrator) // 选填参数 打开本地振动开关 默认false
            .enableLocationService(enableLocationService) // 选填参数 打开本地定位功能开关 默认false
            .enableLocalKeyboard(enableLocalKeyboard) // 选填参数 打开本地键盘开关 默认false
            .enableClipboardCloudPhoneSync(enableCloudSync) // 选填参数 打开云机剪切板同步至真机 默认true
            .enableClipboardLocalPhoneSync(enableLocalSync) // 选填参数 打开真机剪切板同步至云机 默认true
            .enableCamera(enableCamera) // 选填参数 开启相机权限 默认 true
            .enableMic(enableMic) // 选填参数 开启麦克风权限 默认 false
            .streamType(streamType) // 选填参数 指定启动云手机时拉取音视频流类型 默认拉取音视频流
            .videoRenderMode(renderMode) // 选填参数 指定视频流渲染模式 默认等比缩放居中模式
            .videoRotationMode(videoRotationMode) // 选填参数 指定视频旋转模式 默认非SDK处理旋转
            .autoRecycleTime(autoRecyclerTime.toInt())
            // 获取音视频流信息回调监听
            .streamListener(object : IStreamListener {
                override fun onFirstAudioFrame(uid: String) {
                    runOnUiThread {
                        Toast.makeText(
                            this@MainActivity,
                            "订阅视频流到收到音频首帧回调",
                            Toast.LENGTH_SHORT
                        ).show()
                    }
                }

                override fun onFirstRemoteVideoFrame(uid: String, width: Int, height: Int) {
                    runOnUiThread {
                        Toast.makeText(
                            this@MainActivity,
                            "订阅视频流到收到视频首帧回调",
                            Toast.LENGTH_SHORT
                        ).show()
                    }
                }

                override fun onVideoSizeChanged(uid: String, width: Int, height: Int) {
                }

                override fun onStreamPaused() {
                    runOnUiThread {
                        Toast.makeText(
                            this@MainActivity,
                            "调用 pause(),暂停播放后的回调",
                            Toast.LENGTH_SHORT
                        ).show()
                    }
                }

                override fun onStreamConnectionStateChanged(state: Int, reason: Int) {
                    runOnUiThread {
                        Toast.makeText(
                            this@MainActivity,
                            "视频流连接状态变更回调 state: $state",
                            Toast.LENGTH_SHORT
                        ).show()
                    }
                }

                override fun onScreenRotation(rotationType: Int) {
                    runOnUiThread {
                        requestedOrientation =
                            if (rotationType == ScreenRotationType.TYPE_PORTRAIT) ActivityInfo.SCREEN_ORIENTATION_PORTRAIT else ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
                        Toast.makeText(
                            this@MainActivity,
                            "屏幕旋转:${if (rotationType == ScreenRotationType.TYPE_PORTRAIT) "竖屏" else "横屏"}",
                            Toast.LENGTH_SHORT
                        ).show()
                    }
                }
            })
			
        ArmCloudEngine.start(builder.build(), object : IPlayerListener {
            override fun onPlaySuccess(videoStreamProfileId: Int) {
                Log.e("am", "onPlaySuccess ===> videoStreamProfileId: $videoStreamProfileId")
                runOnUiThread {
                    tvRoomId?.text = "当前房间: ${builder.padCode}"
                    Toast.makeText(this@MainActivity, "拉流成功", Toast.LENGTH_SHORT).show()
                }
                initListener()
            }

            override fun onError(code: Int, msg: String) {
                runOnUiThread {
                    Toast.makeText(
                        this@MainActivity,
                        "onError code:$code msg: $msg ",
                        Toast.LENGTH_SHORT
                    ).show()
                }
            }

            override fun onWarning(code: Int, msg: String) {
                runOnUiThread {
                    Toast.makeText(
                        this@MainActivity,
                        "onWarning code:$code  $msg ",
                        Toast.LENGTH_SHORT
                    ).show()
                }
            }

            override fun onNetworkChanged(var1: Int) {
                runOnUiThread {
                    Toast.makeText(
                        this@MainActivity,
                        "onNetworkChanged code:$var1",
                        Toast.LENGTH_SHORT
                    ).show()
                }
            }

            override fun onServiceInit(extras: Map<String, Any>?) {
                runOnUiThread {
                    ArmCloudEngine.getClipBoardServiceManager()?.setBoardSyncClipListener(object :
                        IClipBoardListener {
                        override fun onClipBoardMessageReceived(data: String) {
                            Toast.makeText(
                                this@MainActivity,
                                "收到剪切板消息: $data",
                                Toast.LENGTH_SHORT
                            ).show()
                        }
                    })
                    Toast.makeText(this@MainActivity, "onServiceInit", Toast.LENGTH_SHORT).show()
                }
            }

            override fun networkQualityRtt(rtt: Int) {
                runOnUiThread {
                    tvQuality?.text = "NetworkQuality: $rtt ms"
                    Toast.makeText(this@MainActivity, "networkQualityRtt $rtt", Toast.LENGTH_SHORT).show()
                }
            }

            override fun onMultiCloudPhoneJoin(padCode: String) {
                runOnUiThread {
                    ToastUtils.showShort("群控用户加入")
                }
            }

            override fun onMultiCloudPhoneLeave(padCode: String) {
                runOnUiThread {
                    ToastUtils.showShort("群控用户离开")
                }
            }
        })

恢复从云机拉流

方法:
ArmCloudEngine.resume()
代码示例:
override fun onResume() {
	super.onResume()
	ArmCloudEngine.resume()
}

暂停从云机拉流

方法:
ArmCloudEngine.pause()
代码示例:
override fun onPause() {
	super.onPause()
	ArmCloudEngine.pause()
}

停止云机

方法:
ArmCloudEngine.stop()
代码示例:
override fun onDestroy() {
	super.onDestroy()
	ArmCloudEngine.stop()
}

权限处理

方法:
ArmCloudEngine.onRequestPermissionsResult(requestCode, permissions, grantResults)
代码示例:
overridefunonRequestPermissionsResult(
	requestCode:Int,
	permissions:Array<String?>,
	grantResults:IntArray
){
	super.onRequestPermissionsResult(requestCode,permissions,grantResults)
	ArmCloudEngine.onRequestPermissionsResult(requestCode,permissions,grantResults)
}

功能控制

截图

方法:
ArmCloudEngine.screenShot(@ScreenShotType screenShotType: Int)
参数:

screenShotType: 截图类型

字段名描述
TYPE_LOCAL截图到本地
TYPE_CLOUD截图到云机

设置云机清晰度

方法1:
ArmCloudEngine.videoStreamProfileId(videoDefinitionEnum: VideoDefinitionEnum)
参数:

VideoDefinitionEnum :

字段名描述
DEFINITION_B蓝光
DEFINITION_S超清
DEFINITION_H高清
DEFINITION_L标清
方法2:
ArmCloudEngine.videoStreamProfileId(definition: String, frameRateId: String, bitrateId: String)
参数:

definition : 清晰度 frameRateId : 帧率 bitrateId : 码率

字段名描述
清晰度07:144×256
08:216×384
09:288×512
10:360×640
11:480×848
12:540×960
13:600×1024
14:480×1280
15:720×1280
16:720×1920
17:1080×1920
18:1440×1920
19:1600×2560
20:2880×1080
帧率1:20fps
2:25fps
3:30fps
4:60fps
5:1fps
6:5fps
7:10fps
8:15fps
9:2fps
码率01:1Mbps
02:1.5Mbps
03:2Mbps
04:2.5Mbps
05:3Mbps
06:3.5Mbps
07:4Mbps
08:5Mbps
09:6Mbps
10:8Mbps
11:10Mbps
12:12Mbps
13:200kbps
14:400kbps
15:600kbps

旋转本机屏幕方向

方法:
ArmCloudEngine.rotate(ScreenRotationType.TYPE_LANDSCAPE)
参数:

同 PhonePlayConfig 设置本机旋转方向

是否禁用音频

方法:
ArmCloudEngine.muteAudio(isMetuAudio)
参数:

isMetuAudio : 是否禁用音频 true: 禁用 false:开启

是否禁用视频

方法:
ArmCloudEngine.muteVideo(isMetuVideo)
参数:

isMetuVideo : 是否禁用视频 true: 禁用 false:开启

是否开启本地键盘

方法:
ArmCloudEngine.enableLocalKeyboard(isEnable)
参数:

isEnable : 是否开启本地键盘 true: 启用 false:禁用

是否启用定位功能

方法:
ArmCloudEngine.enableLocationService(isEnable)
参数:

isEnable : 是否启用定位功能 true: 启用 false:禁用

是否启用陀螺仪功能

方法:
ArmCloudEngine.enableGyroscopeSensor(isEnable)
参数:

isEnable : 是否启用传感器功能 true: 启用 false:禁用

是否启用重力感应功能

方法:
ArmCloudEngine.enableAccelerometerSensor(isEnable)
参数:

isEnable : 是否启用重力感应功能 true: 启用 false:禁用

是否启用震动功能

方法:
ArmCloudEngine.enableVibrator(isEnable)
参数:

isEnable : 是否启用震动功能 true: 启用 false:禁用

相机权限

方法:
ArmCloudEngine.enableCamera(isEnable)
参数:

isEnable : 是否开启相机权限 true: 启用 false:禁用

麦克风权限

方法:
ArmCloudEngine.enableMic(isEnable)
参数:

isEnable : 是否开启麦克风权限 true: 启用 false:禁用

设置定位模式

方法:
ArmCloudEngine.setLocationServiceMode(mode@LocationMode)
参数:

mode:定位模式

字段名描述
MODE_AUTO自动模式: SDK自动采集定位
MODE_MANUAL手动模式: 设置 setLocationEventListener(locationEventListener: LocationEventListener) 监听 通过remoteLocationMock手动传入位置

获取位置服务

方法:
ArmCloudEngine.getLocationServer()
返回值:

类型:ILocationService 描述:位置服务

ILocationService
方法参数描述
enableLocationService(isEnable: Boolean)isEnable: 是否开启是否开启定位
remoteLocationMock( @FloatRange(from = -90.0, to = 90.0) latitude: Double, @FloatRange(from = -180.0, to = 180.0) longitude: Double)latitude:纬度
longitude:经度
设置位置信息
remoteLocationMock( @FloatRange(from = -90.0, to = 90.0) latitude: Double, @FloatRange(from = -180.0, to = 180.0) longitude: Double, altitude: Double = 0.0, bearing: Float = 0.0f, accuracy: Float = 0.0f, speed: Float = 0.0f, time: Long = System.currentTimeMillis(), elapsedRealtimeNanos: Long = SystemClock.uptimeMillis(), satellites: Int = 0)latitude:纬度
longitude:经度
altitude: 高度
bearing: 方位角
accuracy: 水平精度半径(以米为单位)
speed: 此位置时的速度(以米/秒为单位
time: 此位置修复的 Unix 纪元时间
elapsedRealtimeNanos: 此修复程序的时间(以系统启动以来经过的实时纳秒为单位)
satellites: 卫星数
设置位置信息

获取剪切板控制器

方法:
ArmCloudEngine.getClipBoardServiceManager()
返回值:

类型:IClipBoardServiceManager 描述:剪切板服务

IClipBoardServiceManager
方法参数描述
setBoardSyncClipListener(iClipBoardListener)iClipBoardListener@IClipBoardListener: 云机剪切板数据监听设置云机剪切板数据监听
sendClipBoardMessage(data: String)data:文本数据手动发送剪贴板数据
enableClipboardLocalPhoneSync(isEnable: Boolean)isEnable:是否开启是否开启剪切板真机同步云机
enableClipboardCloudPhoneSync(isEnable: Boolean)isEnable:是否开启是否开启剪切板云机同步到真机

切换前后摄像头

方法:
ArmCloudEngine.switchCamera(isBack)
参数:

isBack: 是否为后置摄像头 true: 后置 false:前置

发送模拟按键事件

方法:
ArmCloudEngine.sendKeyEvent(systemKeyStrokeEnum SystemKeyStrokeEnum)
参数:

systemKeyStrokeEnum: 按键枚举

枚举名描述
BACK返回按键
HOME主页
JOB任务栏
MENU菜单
VOLUME_ADD音量增加
VOLUME_LESS音量减少

设置无操作回收服务时间

方法:
ArmCloudEngine.autoRecycleTime(recycleTime)
参数:

recycleTime: 无操作回收服务时间 单位 s

获取无操作回收服务时间

方法:
ArmCloudEngine.getAutoRecycleTime(
返回值:

类型: int 描述: 无操作回收服务时间 单位 s

设置拉流类型

方法:
ArmCloudEngine.streamType(streamType)
参数:

同 PhonePlayConfig 设置拉流类型

更新视频流渲染模式

方法:
ArmCloudEngine.updateVideoRenderMode(renderMode)
参数:

同 PhonePlayConfig 设置视频流渲染模式

设置视频旋转模式

方法:
ArmCloudEngine.setVideoRotationMode(rotationMode)
参数:

同 PhonePlayConfig 设置视频旋转模式

获取当前播放状态

方法:
ArmCloudEngine.getStatus()
返回值:

类型: int@CloudPhoneState 描述: 当前播放状态 CloudPhoneState :

字段名描述
STATE_UN_INIT0x0001 未初始化
STATE_INIT_SUCCESS0x0002 初始化成功
STATE_START0x0003 调用拉流
STATE_RUN0x0004 成功拉流
STATE_STOP0x0005 停止拉流

获取消息透传控制器

方法:
ArmCloudEngine.getMessageChannel()
返回值:

类型: IMessageChannel 描述: 消息透传控制器

IMessageChannel
方法:
方法参数描述
setMessageListener(listener: IMessageReceiver?)listener@IMessageReceiver: 透传消息监听设置消息透传监听,回调云机透传到真机的消息
sendMessage(type: Int, data: String, binderService: String, packageName: String)type: 消息类型
data:消息体
binderService: 远端服务名称
packageName: 包名
发送透传消息到云机内指定服务

获取文件上传控制器

方法:
ArmCloudEngine.getUploadManager(application)
参数:

application : 全局上下文

返回值:

类型: IUploadFileManager 描述: 文件上传控制器

IUploadFileManager
方法:
方法参数描述
uploadFile(lifecycleOwner: LifecycleOwner, padCode: String, token: String, path: String, uploadFilePath: String, uploadFileCallBack: IUploadFileCallBack )lifecycleOwner: 生命周期所有者
padCode:云机ID
token: 临时鉴权 token
path: 文件路径
uploadFilePath@UploadFilePath: 文件保存云机路径
uploadFileCallBack@IUploadFileCallBack:文件上传监听
带生命周期的文件上传
uploadFile(lifecycleOwner: LifecycleOwner, padCode: String, token: String, file: File, uploadFilePath: String, uploadFileCallBack: IUploadFileCallBack )lifecycleOwner: 生命周期所有者
padCode:云机ID
token: 临时鉴权 token
file: 待上传文件
uploadFilePath@UploadFilePath: 文件保存云机路径
uploadFileCallBack@IUploadFileCallBack:文件上传监听
带生命周期的文件上传
uploadFile(padCode: String, token: String, path: String, uploadFilePath: String, uploadFileCallBack: IUploadFileCallBack )padCode:云机ID
token: 临时鉴权 token
path: 文件路径
uploadFilePath@UploadFilePath: 文件保存云机路径
uploadFileCallBack@IUploadFileCallBack:文件上传监听
文件上传
uploadFile(padCode: String, token: String, file: File, uploadFilePath: String, uploadFileCallBack: IUploadFileCallBack )padCode:云机ID
token: 临时鉴权 token
file: 待上传文件
uploadFilePath@UploadFilePath: 文件保存云机路径
uploadFileCallBack@IUploadFileCallBack:文件上传监听
文件上传
cancelUpload(path: String)path: 文件路径取消上传
UploadFilePath:
字段名描述
PATH_DCIMDCIM 目录
PATH_DOCUMENTSDocuments 目录
PATH_DOWNLOADDownload 目录
PATH_MOVIESMovies 目录
PATH_MUSICMusic 目录
PATH_PICTURESPictures 目录

获取本地键盘与云机应用控制器

方法:
ArmCloudEngine.getLocalInputManager()
返回值:

类型: ILocalInputManager 描述: 获取本地键盘与云机应用控制器

ILocalInputManager
方法:
方法参数描述
sendInputText(text: String)text: 消息内容发送消息到云机输入框

事件监听

设置清晰度切换回调监听

方法:
setStreamProfileChangeListener(streamProfileChangeCallBack StreamProfileChangeCallBack)
参数:

streamProfileChangeCallBack : 清晰度切换回调接口

示例代码:
ArmCloudEngine.setStreamProfileChangeListener(object:StreamProfileChangeCallBack{
	overridefunonVideoStreamProfileChange(
		isSuccess:Boolean,
		from:String,
		current:String
	){
		runOnUiThread{
			Toast.makeText(
				this@MainActivity,
				"清晰度切换成功from:$fromto:$current",
				Toast.LENGTH_SHORT
			).show()
		}
	}
})

设置无操作回收服务时长的回调监听

方法:
setAutoRecycleTimeCallback(autoRecycleTimeCallback SetAutoRecycleTimeCallback)
参数:

autoRecycleTimeCallback : 无操作回收服务时长的回调

示例代码:
ArmCloudEngine.setAutoRecycleTimeCallback(object : SetAutoRecycleTimeCallback {
	override fun onResult(autoRecycleTime: Int) {
		runOnUiThread {
			Toast.makeText(
				this@MainActivity,
				"无操作回收服务回调 超时时间:$autoRecycleTime",
				Toast.LENGTH_SHORT
			).show()
		}
	}
})

设置本地截图回调监听

方法:
setScreenShotCallBack(screenShotCallBack: ScreenShotCallBack)
参数:

ScreenShotCallBack : 本地截图监听

示例代码:
ArmCloudEngine.setScreenShotCallBack(object : ScreenShotCallBack {
	override fun onScreenShot(bitmap: Bitmap) {
		runOnUiThread {
			Toast.makeText(
				this@MainActivity,
				"本地获取到截图:${bitmap.byteCount}",
				Toast.LENGTH_SHORT
			).show()
		}
	}
})

设置定位回调监听

方法:
setLocationEventListener(locationEventListener: LocationEventListener)
参数:

locationEventListener : 定位监听

示例代码:
ArmCloudEngine.setLocationEventListener(object: LocationEventListener {

	override fun onReceivedRemoteLocationRequest(requestOptions: RequestOptions) {
		runOnUiThread {
			Toast.makeText(
				this@MainActivity,
				"云机请求开启定位",
				Toast.LENGTH_SHORT
			).show()
		}
	}

	override fun onRemoteLocationRequestEnded() {
		runOnUiThread {
			Toast.makeText(
				this@MainActivity,
				"云机请求停止定位",
				oast.LENGTH_SHORT
			).show()
		}
	}

	override fun onSentLocalLocation(locationInfo: LocationInfo) {
		runOnUiThread {
			Toast.makeText(
				this@MainActivity,
				"本机发送定位",
				Toast.LENGTH_SHORT
			).show()
		}
	}

override fun onRemoteLocationUpdated(locationInfo: LocationInfo) {
	runOnUiThread {
		Toast.makeText(
				this@MainActivity,
				"云机位置更新",
				Toast.LENGTH_SHORT
			).show()
		}
	}
})