接口说明

最近更新时间:2025-09-03 14:10:22

我的收藏

接口概览

顶层接口

通过 TcrSdk 对象调用的接口。
方法
描述
init
初始化 SDK,初始化成功后才能使用其他接口。
创建会话对象 TcrSession,用于和云手机进行交互。
创建渲染视图 TcrRenderView,用于显示云手机画面和视图交互。
设置 accessToken,通过 云 API 获取 accessToken,可通过该接口设置也可以通过 init 参数传入。
获取安卓实例对象 AndroidInstance,用于操作云手机安卓实例。

会话接口

通过 TcrSession 对象调用的接口。

生命周期相关接口

方法
描述
access
启动会话,在本地会话对象初始化成功后,调用此方法,以建立和指定 ID 的云手机的连接。在成功建立连接后,此会话对象才能与指定的云手机进行交互。
release
释放会话,客户端释放本地会话资源。云端会在自动检测到心跳消失后释放云端资源。
获取会话请求 ID。

音视频流控制接口

方法
描述
开关音频播放。
开关音频上行。
开关视频上行。
暂停音视频流下行。
恢复音视频流下行。
设置下行的音频的参数。
设置上行的视频的参数。
设置下行视频的接收器。
设置下行音频的接收器。

云端应用交互接口

方法
描述
重启云端应用进程。
pasteText
向云端应用输入框粘贴文本(需输入框已聚焦)。
禁用云端软键盘(仅支持移动端应用)。

云端外设交互​接口

方法
描述
获取云端触摸屏交互对象 TouchScreen。

触摸屏交互接口

通过 TouchScreen 对象调用的接口。
方法
描述
touch
触发云端触屏触摸事件。

安卓实例操作接口

通过 AndroidInstance 对象调用的接口。

单实例操作接口

方法
描述
获取实例截图地址。
获取实例截图。
上传文件到实例。
上传媒体文件到实例。
获取文件下载地址。
获取日志文件下载地址。
下载文件。
switchIME
切换输入法。

多实例批量操作接口

方法
描述
设置设备 GPS 信息,支持批量实例操作。
设置设备分辨率,支持批量实例操作。
paste
粘贴文本,支持批量实例操作。
发送文本到剪切板,支持批量实例操作。
shake
摇一摇,支持批量实例操作。
setSensor
设置设备传感器信息,支持批量实例操作。
发送 App binder 消息,支持批量实例操作。
查询实例属性,支持批量实例操作。
修改实例属性,支持批量实例操作。
查询已安装第三方应用,支持批量实例操作。
修改前台应用保活状态,支持批量实例操作。
查询前台应用保活状态,支持批量实例操作。
卸载应用,支持批量实例操作。
startApp
启动应用,支持批量实例操作。
stopApp
停止应用,支持批量实例操作。
清除应用数据,支持批量实例操作。
enableApp
启用应用,支持批量实例操作。
禁用应用,支持批量实例操作。
摄像头播放媒体文件,支持批量实例操作。
摄像头停止播放媒体文件,支持批量实例操作。
查询当前摄像头媒体播放状态,支持批量实例操作。
摄像头显示图片,支持批量实例操作。
增加后台保活应用,支持批量实例操作。
移除后台保活应用,支持批量实例操作。
覆盖后台保活应用,支持批量实例操作。
查询后台保活应用,支持批量实例操作。
清空后台保活应用,支持批量实例操作。
mute
静音开关,支持批量实例操作。
搜索媒体库文件,支持批量实例操作。
reboot
重启实例,支持批量实例操作。
查询所有应用列表,支持批量实例操作。
关闭应用至后台,支持批量实例操作。
新增应用安装黑名单,支持批量实例操作。
移除应用安装黑名单,支持批量实例操作。
覆盖应用安装黑名单,支持批量实例操作。
查询应用安装黑名单,支持批量实例操作。
清空应用安装黑名单,支持批量实例操作。
获取系统导航栏显示状态,支持批量实例操作。
获取系统媒体音量大小,支持批量实例操作。

接口详细说明

初始化 SDK

初始化(init)云手机 SDK,初始化成功后才能使用 SDK 的其他接口。

输入参数

TcrConfig
参数名称
必选
类型
描述
type
SdkType
SDK 类型,云手机请设置为 CloudPhone。
ctx
Context
当前应用的 Android Context。
logger
TcrLogger
用于接收 SDK 日志的对象,App 需要将收到的 SDK 日志存储到文件和上报,以便分析定位 SDK 运行时的问题。
如果 App 没有显示设置 logger,SDK 会将日志打印到系统 logcat 以及写入日志文件(/storage/emulated/0/Android/data/app package name/files/tcrlogs 目录下)。
注意,当您反馈 SDK 问题时,您需要提供相应的日志。
callback
AsyncCallback
初始化的异步回调对象。必须在回调成功后才能使用 SDK 的其他接口。
accessInfo
Boolean
实例访问的 accessInfo,通过 云 API 获取。
token
Boolean
实例访问的 token,通过 云 API 获取。

示例

TcrSdk.TcrConfig config = new TcrSdk.TcrConfig();
config.type = SdkType.CloudPhone;
config.ctx = this;
config.logger = new TcrLogger() {
// 实现日志记录逻辑
};
config.callback = new AsyncCallback<Void>() {
……
};
config.accessInfo = ……;
config.token = ……;
TcrSdk.getInstance().init(config);

创建会话

创建会话(createTcrSession)对象,用于和云手机进行交互。
会话对象创建后,SDK 内部会异步执行会话的本地初始化逻辑,初始化结果会通知给 builder 传入的参数 TcrSession#Observer 对象的 onEvent() 方法 。成功的通知事件为 TcrSession.Event#STATE_INITED,失败的通知事件为 TcrSession.Event#STATE_CLOSED。使用者只有在收到会话初始化成功的事件之后,才能进一步调用 access() 方法与云手机进行建连。

输入参数

参见 TcrSessionConfig

返回值

创建的会话对象。如果为 null 则代表对象创建失败(通常是因 SDK 状态异常,例如未初始化成功)。
注意:
只有成功创建了会话对象,内部才会执行会话的本地初始化逻辑,才可能进一步收到 observer 的回调事件。

示例

// Tcr会话的观察者,处理各类事件通知的消息和数据
private final Observer mSessionObserver = new Observer() {
@Override
public void onEvent(TcrSession.Event event, Object eventData) {
switch (event) {
case STATE_INITED:// 本地会话对象初始化完成
// 可以开始连接指定的云手机。
boolean ret = mTcrSession.access(mGroupInstanceIds, mIsGroup);
if (!ret) {
showToast("连接云手机失败,请重试", Toast.LENGTH_SHORT);
finish();
}
break;
case STATE_CONNECTED:// 成功和指定的云手机建立连接
// 设置云手机的主控、同步列表、请求主控视频流
if (mIsGroup) {
String masterId = mGroupInstanceIds.get(0);
TcrSdk.getInstance().getAndroidInstance().setMaster(masterId);
TcrSdk.getInstance().getAndroidInstance().setSyncList(mGroupInstanceIds);
TcrSdk.getInstance().getAndroidInstance().requestStream(masterId, "open", "low");
}
break;
case STATE_CLOSED:
showToast("会话关闭", Toast.LENGTH_SHORT);
finish();
break;
}
}
};

// 创建Tcr会话对象
private void initTcrSession() {
TcrSessionConfig tcrSessionConfig = TcrSessionConfig.builder().observer(mSessionObserver).build();
mTcrSession = TcrSdk.getInstance().createTcrSession(tcrSessionConfig);
if (mTcrSession == null) {
Log.e(TAG, "mTcrSession = null");
showToast("创建会话失败,请检查TcrSdk是否初始化成功", Toast.LENGTH_SHORT);
}
}

创建渲染视图

创建渲染视图(createTcrRenderView)对象,用于 UI 上显示云手机画面和视图交互。

输入参数

参数名称
必选
类型
描述
context
Context
视图的 Android Context。
session
TcrSession
视图关联的会话对象。
type
TcrRenderViewType
视图类型。

示例

// 创建渲染视图
mRenderView = TcrSdk.getInstance().createTcrRenderView(PlayActivity.this, mTcrSession, TcrRenderViewType.SURFACE);
if (mRenderView == null) {
Log.e(TAG, "createTcrRenderView 失败");
return;
}
// 将渲染视图添加到界面上
((FrameLayout) findViewById(R.id.render_view_parent)).addView(mRenderView);

设置 AccessToken

设置 accessToken(setAccessToken)。

输入参数

参数名称
必选
类型
描述
accessInfo
String
通过 云 API 获取的访问信息。
token
String
通过 云 API 获取的令牌。

获取安卓实例

获取安卓实例对象(getAndroidInstance),用于操作云手机安卓实例。
AndroidInstance androidInstance = TcrSdk.getInstance().getAndroidInstance();

启动会话

启动会话(access),建立与云手机的连接。在本地会话对象初始化成功后(参见 创建会话),调用此方法以建立和指定 ID 的云手机的连接。在调用此方法之前,需要在 init() 方法的 TcrConfig 内传入正确的 accessToken 或者调用了 setAccessToken()
建连的结果会异步回调给 TcrSession#Observer#onEvent() 方法,成功事件为 TcrSession.Event#STATE_CONNECTED ,失败事件为 TcrSession.Event#STATE_CLOSED。使用者只有在收到成功建立连接的事件后,才能使用此会话对象与指定的云手机进行交互。

输入参数

参数名称
必选
类型
描述
instanceIds
ArrayList<String>
此会话要控制的实例 ID 列表。如果 isGroupControl 为 false,则只会取列表里的第一个元素。

返回值

连接请求是否成功发起(注意:实际连接结果异步回调返回)。
返回 true:已成功发起连接请求。
返回 false:请求发送失败(通常因参数无效或会话状态异常)。

示例

参见前面 创建会话 的示例。

释放会话

释放会话(release),客户端释放本地会话资源。云端会在自动检测到心跳消失后释放云端资源。

示例

mTcrSession.release();

获取会话请求 ID

获取当前会话的请求 ID(getRequestId),用于和 SDK 后台排查问题。

示例

mTcrSession.getRequestId();

开关音频播放

setEnableAudioPlaying

输入参数

enable:true 为启用音频播放,false 为禁用。

返回值

调用示例

参考 TcrDemo

开关音频上行

启用或禁用从麦克风捕获的本地音轨。启用后,本地捕获的音频会上行至云端。

输入参数

enableLocalAudio:true 为启用,false 为禁用。

返回值

调用示例

参考 TcrDemo

开关视频上行

setEnableLocalAudio
启用或禁用从摄像头捕获的本地视频。启用后,本地捕获的视频画面会上行至云端。

输入参数

enableLocalVideo:true 为启用,false 为禁用。

返回值

调用示例

参考 TcrDemo

暂停音视频流下行

pauseStreaming

调用示例

参考 TcrDemo

恢复音视频流下行

resumeStreaming

调用示例

参考 TcrDemo

设置上行的视频的参数

setLocalVideoProfile
配置本地上行的视频的参数(分辨率、帧率、码率、摄像头方向)。

输入参数

参数名称
必选
类型
描述
width
int
视频宽度。
height
int
视频高度。
fps
int
帧率。
minBitrate
int
最小比特率。
maxBitrate
int
最大比特率。
isFrontCamera
BOOL
是否为前置摄像头。

返回值

调用示例

参考 TcrDemo

设置下行的音频的参数

设置远端下行的音频的音量参数(setRemoteAudioPlayProfile)。

输入参数

参数名称
必选
类型
描述
volume
float
音量系数,取值 [0,10]。

返回值

调用示例

参考 TcrDemo

设置下行视频的接收器

setVideoSink
设置视频渲染目标。SDK 将解码后的视频帧回调到 videoSink,用于后处理或渲染。

输入参数

videoSink:视频接收器,传 null 可移除现有目标。

返回值

调用示例

参考 TcrDemo

设置下行音频的接收器

setAudioSink
为本次会话设置一个音频接收器。设置完成后,SDK 会将音频数据回调到该音频接收器。

输入参数

audioSink:音频接收器,传 null 可移除现有目标。

返回值

调用示例

参考 TcrDemo

重启云端应用

restartCloudApp
重启云端应用进程。

输入参数

返回值

调用示例

参考 TcrDemo

向云应用粘贴文本

pasteText
向云端应用输入框粘贴文本(需输入框已聚焦)。

输入参数

参数名称
必选
类型
描述
text
String
要粘贴的文本内容。

返回值

调用示例

参考 TcrDemo

禁用云端软键盘

setDisableCloudInput
禁用云端软键盘(仅支持移动端应用)。

输入参数

参数名称
必选
类型
描述
disableCloudInput
boolean
是否禁用云端输入。

返回值

调用示例

参考 TcrDemo

获取云端触摸屏交互对象

getTouchScreen
获取当前会话的云端触摸屏交互对象,用于和云端触摸屏进行交互。该方法将本地触摸视图的事件转换为云端触摸的事件,实现远程触控交互。

输入参数

返回值

可以和云端触摸屏进行交互的 TouchScreen 对象。

调用示例

参考 TcrDemo

触发云端触屏触摸事件

touch
向云端触摸屏发送触摸事件,模拟用户对云端设备的触控操作(如点击、滑动等)。

输入参数

参数名称
必选
类型
描述
x
float
触摸点在渲染视图中的水平坐标。
y
float
触摸点在渲染视图中的垂直坐标。
eventType
int
触摸事件类型,0代表按下,1代表移动,2代表抬起。
fingerID
int
触摸点唯一标识符。同一手势中,同一手指的多次事件(如按下→移动→抬起)共享相同 fingerID,用于跟踪多点触控轨迹。
来源:通常从 android.view.MotionEvent.getPointerId(int) 获取。
width
int
渲染视图的宽度(像素单位)。用于坐标归一化计算,确保 x 值在 [0, width] 范围内有效。
height
int
渲染视图的高度(像素单位)。用于坐标归一化计算,确保 y 值在 [0, height] 范围内有效。
timestamp
long
含义:事件发生的时间戳(单位:毫秒),基于系统启动时间(SystemClock.uptimeMillis())。
用途:保证事件顺序一致性,云端可据此处理时序逻辑(如手势识别)。
来源:从 MotionEvent.getEventTime() 获取。

返回值

调用示例

参考 TcrDemo

获取实例截图地址

获取实例截图地址(getInstanceImageAddress)

输入参数

Map<String, Object> params,内容为:
参数名称
必选
类型
描述
instanceId
String
实例 ID。
quality
int
截图质量,取值范围 0-100,默认 20。
screenshot_width
int
截图宽度。
screenshot_height
int
截图高度。

返回值

参数名称
类型
描述
url
String
截图地址,失败返回 null。

示例

Map<String, Object> params = new HashMap<>();
params.put("instance_id", mInstanceIds.get(0));
params.put("screenshot_quality", 80);
params.put("screenshot_width", 1080);
params.put("screenshot_height", 1920);
String url = getAndroidInstance().getInstanceImageAddress(params);

获取实例截图

获取实例截图信息(getInstanceImage) 。

输入参数

Map<String, Object> params,内容为:
参数名称
必选
类型
描述
instanceId
String
实例 ID。
quality
int
截图质量,取值范围 0-100,默认 20。
screenshot_width
int
截图宽度。
screenshot_height
int
截图高度。
AsyncCallback 异步回调对象。

返回值

异步回调 AsyncCallback,成功返回 Bitmap 对象。

示例

Map<String, Object> params = new HashMap<>();
params.put("instance_id", mInstanceIds.get(0));
params.put("screenshot_quality", 80);
params.put("screenshot_width", 1080);
params.put("screenshot_height", 1920);
AsyncCallback<Bitmap> callback = new AsyncCallback<Bitmap>() {
@Override
public void onSuccess(Bitmap bitmap) {
}

@Override
public void onFailure(int code, String errorMsg) {
}
};
getAndroidInstance().getInstanceImage(params, callback);

上传文件到实例

上传文件到实例(uploadFile)。
默认上传到 /sdcard/Download 目录下,可使用 path 指定上传目录(仅支持/sdcard/ 下目录)。

输入参数

参数名称
必选
类型
描述
instanceId
String
目标云手机实例 ID。
files
UploadFileItem[]
要上传的文件数组。
file.fileBytes
byte[]
文件二进制内容。
file.file
String
文件名(含扩展名)。
file.path
String
云端存储路径,如 "/sdcard/Download/"。
callback
AsyncCallback<String>
异步回调对象。

返回值

JSON 字符串:{Code: int; Message: string; FileStatus: [{ CloudPath: string; FileName: string }]}
参数名称
类型
描述
Code
int
错误码。
Message
String
错误消息。
FileStatus
Object[]
文件状态对象。
FileStatus.CloudPath
String
云端路径。
FileStatus.FileName
String
文件名。

示例

private void upload(ArrayList<Uri> fileList, boolean isMedia) {
UploadFileItem[] files = new UploadFileItem[fileList.size()];
for (int i = 0; i < fileList.size(); i++) {
files[i] = new UploadFileItem();
files[i].fileBytes = readFilesFromUris(fileList.get(i));
files[i].fileName = getFileNameFromUri(fileList.get(i));
files[i].filePath = "/sdcard/Movies/";
}

AsyncCallback<String> callback = new AsyncCallback<String>() {
@Override
public void onSuccess(String response) {
// 示例数据 {Code=0, Message='null', FileStatus=[FileStatus{FileName='testDownloadFile', CloudPath='/sdcard/Download/testDownloadFile'}]}
UploadResponse uploadResponse = GsonUtils.fromJson(response, UploadResponse.class);
LogUtils.d(TAG, "get response: " + uploadResponse);
if (uploadResponse == null) {
mResultTextView.setText("文件上传异常: uploadResponse 解析失败");
return;
}
if (uploadResponse.Code == 0) {
StringBuilder sb = new StringBuilder("文件上传成功:\\n");
if (uploadResponse.FileStatus != null) {
for (UploadResponse.FileStatus status : uploadResponse.FileStatus) {
sb.append("文件名: ").append(status.FileName).append("\\n云端路径: ")
.append(status.CloudPath).append("\\n");
}
}
mResultTextView.setText(sb.toString());
} else {
mResultTextView.setText("文件上传失败: " + uploadResponse.Message);
}
}

@Override
public void onFailure(int code, String errorMsg) {
mResultTextView.setText("文件上传失败: " + code + ", " + errorMsg);
}
};
if (isMedia) {
getAndroidInstance().uploadMedia(mInstanceIds.get(0), files, callback);
} else {
getAndroidInstance().uploadFile(mInstanceIds.get(0), files, callback);
}
}

上传媒体到实例

上传媒体文件到实例(uploadMedia)。
固定上传至 /data/media/0/DCIM 目录,上传完毕会通知系统添加媒体文件到相册中。

输入参数

与“上传文件到实例(uploadFile)”方法一样,但会忽略 file.path 字段,云端固定存储至 /data/media/0/DCIM 目录。

返回值

JSON 字符串:{Code: int; Message: string;}

示例

参考“上传文件到实例(uploadFile)”。

获取文件下载地址

获取实例文件的下载地址(getInstanceDownloadAddress)。

输入参数

参数名称
必选
类型
描述
instanceId
String
实例 ID。
path
String
要下载的云端文件的路径。

返回值

参数名称
类型
描述
address
String
下载地址,失败返回 null。

示例

String address = getAndroidInstance().getInstanceDownloadAddress(mInstanceIds.get(0), "/sdcard/Download/testDownloadFile");

获取日志文件下载地址

获取云手机实例的日志文件的下载地址(getInstanceDownloadLogcatAddress)。

输入参数

参数名称
必选
类型
描述
instanceId
String
实例 ID。
recentDays
int
表示下载几天内修改过的 logcat 日志文件。

返回值

参数名称
类型
描述
address
String
下载地址,失败返回 null。

示例

String address = getAndroidInstance().getInstanceDownloadAddress(mInstanceIds.get(0), 3);

下载文件

下载文件(downloadFile)。

输入参数

参数名称
必选
类型
描述
params
Map<String, Object>
下载参数,包含:
instance_id:云手机实例 ID。
path:要下载的云端文件的路径。
localFile
File
下载文件存储到本地的 File,应用需确保有写入权限。
callback
AsyncCallback<String>
异步回调对象。

返回值

异步回调结果。

示例

String localPath = "/sdcard/Download/testDownloadFile";
String cloudPath = "/sdcard/Download/testDownloadFile";
Map<String, Object> params = new HashMap<>();
params.put("instance_id", mInstanceIds.get(0));
params.put("path", cloudPath);
AsyncCallback<String> callback = new AsyncCallback<String>() {
@Override
public void onSuccess(String response) {
mResultTextView.setText("文件下载成功");
}

@Override
public void onFailure(int code, String errorMsg) {
mResultTextView.setText("文件下载失败: " + code + ", " + errorMsg);
}
};
getAndroidInstance().downloadFile(params, new File(localPath), callback);

切换输入法

切换输入法(switchIME)。

输入参数

参数名称
必选
类型
描述
ime
String
"cloud" :云端输入法。
"local":本地输入法。

示例

getAndroidInstance().switchIME("local");

设置设备 GPS 信息

设置设备 GPS 信息(setLocation),支持批量实例操作。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { Longitude: double; Latitude: double } }
参数名称
必选
类型
描述
Longitude
double
经度。
Latitude
double
纬度。

返回值

类型:BatchTaskResponse

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
JsonObject param = new JsonObject();
param.addProperty("Longitude", 121.4737);
param.addProperty("Latitude", 31.2304);
params.put(instanceId, param);
}
getAndroidInstance().setLocation(params, mBatchCallback);

设置设备分辨率

设置设备分辨率(setResolution)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { Width: int; Height: int; DPI?: int } };
参数名称
必选
类型
描述
Width
int
宽。
Height
int
高。
DPI
int
像素密度。

返回值

类型:BatchTaskResponse

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
JsonObject param = new JsonObject();
param.addProperty("Width", 1080);
param.addProperty("Height", 1920);
param.addProperty("DPI", 420);
params.put(instanceId, param);
}
getAndroidInstance().setResolution(params, mBatchCallback);

粘贴文本

粘贴文本(paste)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { Text: string } }
参数名称
必选
类型
描述
Text
String
文本。

返回值

类型:BatchTaskResponse

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
JsonObject param = new JsonObject();
param.addProperty("Text", "粘贴的文本内容");
params.put(instanceId, param);
}
getAndroidInstance().paste(params, mBatchCallback);

发送文本到剪切板

发送文本到剪切板(sendClipboard)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { Text: string } }
参数名称
必选
类型
描述
Text
String
文本。

返回值

类型:BatchTaskResponse

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
JsonObject param = new JsonObject();
param.addProperty("Text", "剪贴板内容");
params.put(instanceId, param);
}
getAndroidInstance().sendClipboard(params, mBatchCallback);

摇一摇

摇一摇(shake)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { } }

返回值

类型:BatchTaskResponse

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
params.put(instanceId, new JsonObject());
}
getAndroidInstance().shake(params, mBatchCallback);

设置设备传感器信息

设置设备传感器信息(setSensor)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { Type: 'accelerometer' | 'gyroscope'; Values: double[] } }
参数名称
必选
类型
描述
Type
String
传感器 leasing accelerometer(加速器),gyroscope(陀螺仪)。
Accuracy
int
精度。
Values
double[]
传感器对应的值,数组长度为 3,分别表示 x/y/z 轴的值。

返回值

类型:BatchTaskResponse

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
JsonObject param = new JsonObject();
param.addProperty("Type", "accelerometer");
param.addProperty("Accuracy", 3);

JsonArray values = new JsonArray();
values.add(0.5);
values.add(-0.3);
values.add(0.8);
param.add("Values", values);

params.put(instanceId, param);
}
getAndroidInstance().setSensor(params, mBatchCallback);

发送 App binder 消息

发送 App binder 消息(sendTransMessage)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { PackageName: string; Msg: string } }
参数名称
必选
类型
描述
PackageName
String
包名。
Msg
String
消息。

返回值

类型:BatchTaskResponse

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
JsonObject param = new JsonObject();
param.addProperty("PackageName", "com.example.app");
param.addProperty("Msg", "消息内容");
params.put(instanceId, param);
}
getAndroidInstance().sendTransMessage(params, mBatchCallback);

查询实例属性

查询实例属性(describeInstanceProperties)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { }

返回值

类型:BatchTaskResponse

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
params.put(instanceId, new JsonObject());
}
getAndroidInstance().describeInstanceProperties(params, mBatchCallback);

修改实例属性

修改实例属性(modifyInstanceProperties)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: param },其中 param 内容参考:
{
"RequestID": "modify_req_20230901001",
"DeviceInfo": {
"Brand": "Samsung",
"Model": "Galaxy S24"
},
"ProxyInfo": {
"Enabled": true,
"Protocol": "socks5",
"Host": "proxy.example.com",
"Port": 1080,
"User": "user123",
"Password": "pass123"
},
"GPSInfo": {
"Longitude": 121.4737,
"Latitude": 31.2304
},
"SIMInfo": {
"State": 1 // sim 状态。 1:未插入 sim 卡 5:sim 卡已就绪
},
"LocaleInfo": {
"Timezone": "Asia/Shanghai"
},
"LanguageInfo": {
"Language": "zh",
"Country": "CN"
},
"ExtraProperties": [
{
"Key": "custom_property1",
"Value": "value1"
},
{
"Key": "custom_property2",
"Value": "value2"
}
]
}

返回值

类型:BatchTaskResponse

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
JsonObject param = new JsonObject();
param.addProperty("RequestID", UUID.randomUUID().toString());

JsonObject deviceInfo = new JsonObject();
deviceInfo.addProperty("Brand", "brand");
deviceInfo.addProperty("Model", "model");
param.add("DeviceInfo", deviceInfo);

JsonObject proxyInfo = new JsonObject();
proxyInfo.addProperty("Enabled", true);
proxyInfo.addProperty("Protocol", "socks5");
proxyInfo.addProperty("Host", "proxy.example.com");
proxyInfo.addProperty("Port", 1080);
proxyInfo.addProperty("User", "user");
proxyInfo.addProperty("Password", "password");
param.add("ProxyInfo", proxyInfo);

JsonObject gpsInfo = new JsonObject();
gpsInfo.addProperty("Longitude", 121.4737);
gpsInfo.addProperty("Latitude", 31.2304);
param.add("GPSInfo", gpsInfo);

JsonObject simInfo = new JsonObject();
simInfo.addProperty("State", 1);
simInfo.addProperty("PhoneNumber", "1234567890");
simInfo.addProperty("IMSI", "imsi");
simInfo.addProperty("ICCID", "iccid");
param.add("SIMInfo", simInfo);

JsonObject localeInfo = new JsonObject();
localeInfo.addProperty("Timezone", "Asia/Shanghai");
param.add("LocaleInfo", localeInfo);

JsonObject languageInfo = new JsonObject();
languageInfo.addProperty("Language", "zh");
languageInfo.addProperty("Country", "CN");
param.add("LanguageInfo", languageInfo);

JsonArray extraProperties = new JsonArray();
JsonObject extraProp = new JsonObject();
extraProp.addProperty("Key", "key");
extraProp.addProperty("Value", "value");
extraProperties.add(extraProp);
param.add("ExtraProperties", extraProperties);

params.put(instanceId, param);
}
getAndroidInstance().modifyInstanceProperties(params, mBatchCallback);

查询已安装第三方应用

查询已安装第三方应用(listUserApps)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { }

返回值

类型:BatchTaskResponse
其中每个实例 ID 返回的 JsonElement 内容参考:
{
"AppList": [
{
"PackageName": "com.android.chrome",
"LastUpdateTimeMs": 1667232000000,
"FirstInstallTimeMs": 1635724800000,
"VersionName": "115.0.5790.166",
"Label": "Chrome"
},
{
"PackageName": "com.tencent.mm",
"LastUpdateTimeMs": 1667328405000,
"FirstInstallTimeMs": 1635811200000,
"VersionName": "8.0.35",
"Label": "微信"
},
{
"PackageName": "com.zhihu.android",
"LastUpdateTimeMs": 1667256803000,
"FirstInstallTimeMs": 1635897600000,
"VersionName": "8.27.0",
"Label": "知乎"
}
],
"Code": 0,
"Msg": "xx"
}

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
params.put(instanceId, new JsonObject());
}
getAndroidInstance().listUserApps(params, mBatchCallback);

修改前台应用保活状态

修改前台应用保活状态(modifyKeepFrontAppStatus)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { PackageName: string; Enable: boolean; RestartInterValSeconds: int; } }
参数名称
必选
类型
描述
PackageName
String
包名。
Enable
Boolean
是否保活。
RestartInterValSeconds
int
重新拉起最长间隔。

返回值

类型:BatchTaskResponse

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
JsonObject param = new JsonObject();
param.addProperty("PackageName", "com.example.app");
param.addProperty("Enable", true);
param.addProperty("RestartInterValSeconds", 5);
params.put(instanceId, param);
}
getAndroidInstance().modifyKeepFrontAppStatus(params, mBatchCallback);

查询前台应用保活状态

查询前台应用保活状态(describeKeepFrontAppStatus)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { }

返回值

类型:BatchTaskResponse
其中每个实例 ID 返回的 JsonElement 内容参考:
{
"PackageName": "com.example.app",
"Enable": true,
"RestartInterValSeconds": 3,
"Code": 0,
"Msg": "xx"
}
参数名称
类型
描述
PackageName
String
包名。
Enable
Boolean
是否保活。
RestartInterValSeconds
int
重新拉起最长间隔。

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
params.put(instanceId, new JsonObject());
}
getAndroidInstance().describeKeepFrontAppStatus(params, mBatchCallback);

卸载应用

卸载应用(unInstallByPackageName)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { PackageName: string; } }
参数名称
必选
类型
描述
PackageName
String
包名。

返回值

类型:BatchTaskResponse

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
JsonObject param = new JsonObject();
param.addProperty("PackageName", "com.example.app");
params.put(instanceId, param);
}
getAndroidInstance().unInstallByPackageName(params, mBatchCallback);

启动应用

启动应用(startApp)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { PackageName: string; ActivityName: string } }
参数名称
必选
类型
描述
PackageName
String
包名。
ActivityName
String
启动的 Activity 名称。

返回值

类型:BatchTaskResponse

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
JsonObject param = new JsonObject();
param.addProperty("PackageName", "com.example.app");
param.addProperty("ActivityName", "com.example.app.MainActivity");
params.put(instanceId, param);
}
getAndroidInstance().startApp(params, mBatchCallback);

停止应用

停止应用(stopApp)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { PackageName: string; } }
参数名称
必选
类型
描述
PackageName
String
包名。

返回值

类型:BatchTaskResponse

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
JsonObject param = new JsonObject();
param.addProperty("PackageName", "com.example.app");
params.put(instanceId, param);
}
getAndroidInstance().stopApp(params, mBatchCallback);

清除应用数据

清除应用数据(clearAppData)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { PackageName: string; } }
参数名称
必选
类型
描述
PackageName
String
包名。

返回值

类型:BatchTaskResponse

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
JsonObject param = new JsonObject();
param.addProperty("PackageName", "com.example.app");
params.put(instanceId, param);
}
getAndroidInstance().clearAppData(params, mBatchCallback);

启用应用

启用应用(enableApp)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { PackageName: string; } }
参数名称
必选
类型
描述
PackageName
String
包名。

返回值

类型:BatchTaskResponse

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
JsonObject param = new JsonObject();
param.addProperty("PackageName", "com.example.app");
params.put(instanceId, param);
}
getAndroidInstance().enableApp(params, mBatchCallback);

禁用应用

禁用应用(disableApp)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { PackageName: string; } }
参数名称
必选
类型
描述
PackageName
String
包名。

返回值

类型:BatchTaskResponse

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
JsonObject param = new JsonObject();
param.addProperty("PackageName", "com.example.app");
params.put(instanceId, param);
}
getAndroidInstance().disableApp(params, mBatchCallback);

摄像头播放媒体文件

摄像头播放媒体文件(startCameraMediaPlay)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { FilePath: string; Loops: int }; }
参数名称
必选
类型
描述
FilePath
String
文件路径。
Loops
int
循环次数,负数表示无限循环。

返回值

类型:BatchTaskResponse

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
JsonObject param = new JsonObject();
param.addProperty("FilePath", "/sdcard/media.mp4");
param.addProperty("Loops", 3);
params.put(instanceId, param);
}
getAndroidInstance().startCameraMediaPlay(params, mBatchCallback);

摄像头停止播放媒体文件

摄像头停止播放媒体文件(stopCameraMediaPlay)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { }; }

返回值

类型:BatchTaskResponse

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
params.put(instanceId, new JsonObject());
}
getAndroidInstance().stopCameraMediaPlay(params, mBatchCallback);

查询当前摄像头媒体播放状态

查询当前摄像头媒体播放状态(describeCameraMediaPlayStatus)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { }; }

返回值

类型:BatchTaskResponse
其中每个实例 ID 返回的 JsonElement 内容参考:
{
"FilePath": "/sdcard/video.mp4",
"Loops": 3,
"Code": 0,
"Msg": "xx"
}

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
params.put(instanceId, new JsonObject());
}
getAndroidInstance().describeCameraMediaPlayStatus(params, mBatchCallback);

摄像头显示图片

摄像头显示图片(displayCameraImage)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { FilePath: string; }; }
参数名称
必选
类型
描述
FilePath
String
文件路径。

返回值

类型:BatchTaskResponse

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
JsonObject param = new JsonObject();
param.addProperty("FilePath", "/sdcard/image.png");
params.put(instanceId, param);
}
getAndroidInstance().displayCameraImage(params, mBatchCallback);

增加后台保活应用

增加后台保活应用(addKeepAliveList)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { AppList: string[] } }
参数名称
必选
类型
描述
AppList
String[]
App 列表。

返回值

类型:BatchTaskResponse

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
JsonObject param = new JsonObject();
JsonArray appList = new JsonArray();
appList.add("com.example.app");
param.add("AppList", appList);
params.put(instanceId, param);
}
getAndroidInstance().addKeepAliveList(params, mBatchCallback);

移除后台保活应用

移除后台保活应用(removeKeepAliveList)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { AppList: string[] } }
参数名称
必选
类型
描述
AppList
String[]
App 列表。

返回值

类型:BatchTaskResponse

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
JsonObject param = new JsonObject();
JsonArray appList = new JsonArray();
appList.add("com.example.app");
param.add("AppList", appList);
params.put(instanceId, param);
}
getAndroidInstance().removeKeepAliveList(params, mBatchCallback);

覆盖后台保活应用

覆盖后台保活应用(setKeepAliveList)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { AppList: string[] } }
参数名称
必选
类型
描述
AppList
String[]
App 列表。

返回值

类型:BatchTaskResponse

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
JsonObject param = new JsonObject();
JsonArray appList = new JsonArray();
appList.add("com.example.app");
param.add("AppList", appList);
params.put(instanceId, param);
}
getAndroidInstance().setKeepAliveList(params, mBatchCallback);

查询后台保活应用

查询后台保活应用(describeKeepAliveList)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { }; }

返回值

类型:BatchTaskResponse
其中每个实例 ID 返回的 JsonElement 内容参考:
{
"AppList": ["com.wechat", "com.alipay", "com.dingtalk"],
"Code": 0,
"Msg": "xx"
}

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
params.put(instanceId, new JsonObject());
}
getAndroidInstance().describeKeepAliveList(params, mBatchCallback);

清空后台保活应用

清空后台保活应用(clearKeepAliveList)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { }; }

返回值

类型:BatchTaskResponse

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
params.put(instanceId, new JsonObject());
}
getAndroidInstance().clearKeepAliveList(params, mBatchCallback);

静音开关

静音开关(mute)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { Mute: boolean } }
参数名称
必选
类型
描述
Mute
Boolean
是否静音。

返回值

类型:BatchTaskResponse

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
JsonObject param = new JsonObject();
param.addProperty("Mute", true);
params.put(instanceId, param);
}
getAndroidInstance().mute(params, mBatchCallback);

媒体库文件搜索

媒体库文件搜索(mediaSearch)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { Keyword: string } }
参数名称
必选
类型
描述
Keyword
String
关键字。

返回值

类型:BatchTaskResponse

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
JsonObject param = new JsonObject();
param.addProperty("Keyword", "搜索关键词");
params.put(instanceId, param);
}
getAndroidInstance().mediaSearch(params, mBatchCallback);

重启实例

重启实例(reboot)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { }; }

返回值

类型:BatchTaskResponse

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
params.put(instanceId, new JsonObject());
}
getAndroidInstance().reboot(params, mBatchCallback);

查询所有应用列表

查询所有应用列表(listAllApps)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { }

返回值

类型:BatchTaskResponse
其中每个实例 ID 返回的 JsonElement 内容参考:
{
"AppList": [
{
"PackageName": "com.android.chrome",
"LastUpdateTimeMs": 1667232000000,
"FirstInstallTimeMs": 1635724800000,
"VersionName": "115.0.5790.166",
"Label": "Chrome"
},
{
"PackageName": "com.tencent.mm",
"LastUpdateTimeMs": 1667328405000,
"FirstInstallTimeMs": 1635811200000,
"VersionName": "8.0.35",
"Label": "微信"
},
{
"PackageName": "com.zhihu.android",
"LastUpdateTimeMs": 1667256803000,
"FirstInstallTimeMs": 1635897600000,
"VersionName": "8.27.0",
"Label": "知乎"
}
],
"Code": 0,
"Msg": "xx"
}

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
params.put(instanceId, new JsonObject());
}
getAndroidInstance().listAllApps(params, mBatchCallback);

关闭应用至后台

关闭应用至后台(moveAppBackground)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { }; }

返回值

类型:BatchTaskResponse

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
params.put(instanceId, new JsonObject());
}
getAndroidInstance().moveAppBackground(params, mBatchCallback);

新增应用安装黑名单

新增应用安装黑名单(addAppInstallBlackList)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { AppList: string[] } }
参数名称
必选
类型
描述
AppList
String[]
App 列表。

返回值

类型:BatchTaskResponse

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
JsonObject param = new JsonObject();
JsonArray appList = new JsonArray();
appList.add("com.example.app");
param.add("AppList", appList);
params.put(instanceId, param);
}
getAndroidInstance().addAppInstallBlackList(params, mBatchCallback);

移除应用安装黑名单

移除应用安装黑名单(removeAppInstallBlackList)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { AppList: string[] } }
参数名称
必选
类型
描述
AppList
String[]
App 列表。

返回值

类型:BatchTaskResponse

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
JsonObject param = new JsonObject();
JsonArray appList = new JsonArray();
appList.add("com.example.app");
param.add("AppList", appList);
params.put(instanceId, param);
}
getAndroidInstance().removeAppInstallBlackList(params, mBatchCallback);

覆盖应用安装黑名单

覆盖应用安装黑名单(setAppInstallBlackList)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { AppList: string[] } }
参数名称
必选
类型
描述
AppList
String[]
App 列表。

返回值

类型:BatchTaskResponse

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
JsonObject param = new JsonObject();
JsonArray appList = new JsonArray();
appList.add("com.example.app");
param.add("AppList", appList);
params.put(instanceId, param);
}
getAndroidInstance().setAppInstallBlackList(params, mBatchCallback);

查询应用安装黑名单

查询应用安装黑名单(describeAppInstallBlackList)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { }; }

返回值

类型:BatchTaskResponse
其中每个实例 ID 返回的 JsonElement 内容参考:
{
"AppList": ["com.wechat", "com.alipay", "com.dingtalk"],
"Code": 0,
"Msg": "xx"
}

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
params.put(instanceId, new JsonObject());
}
getAndroidInstance().describeAppInstallBlackList(params, mBatchCallback);

清空应用安装黑名单

清空应用安装黑名单(clearAppInstallBlackList)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { }; }

返回值

类型:BatchTaskResponse

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
params.put(instanceId, new JsonObject());
}
getAndroidInstance().clearAppInstallBlackList(params, mBatchCallback);

获取系统导航栏显示状态

获取系统导航栏显示状态(getNavVisibleStatus)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { }; }

返回值

类型:BatchTaskResponse
其中每个实例 ID 返回的 JsonElement 内容参考:{ Visible: boolean}
参数名称
类型
描述
Visible
Boolean
是否可见。

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
params.put(instanceId, new JsonObject());
}
getAndroidInstance().getNavVisibleStatus(params, mBatchCallback);

获取系统媒体音量大小

获取系统媒体音量大小(getSystemMusicVolume)。

输入参数

类型:Map<String, JsonObject> params,内容为 { [InstanceId: string]: { }; }

返回值

类型:BatchTaskResponse
其中每个实例 ID 返回的 JsonElement 内容参考:
{
"Volume":15,
"Code": 0,
"Msg": "xx"
}

示例

Map<String, JsonObject> params = new HashMap<>();
for (String instanceId : mInstanceIds) {
params.put(instanceId, new JsonObject());
}
getAndroidInstance().getSystemMusicVolume(params, mBatchCallback);

相关数据结构

批量操作返回值

批量操作返回值(BatchTaskResponse)。

数据结构

参数名称
类型
描述
Code
int
Code 为 0 表示所有操作成功完成,非0值表示操作失败或部分失败。
Code:10001, Msg: "invalid param"。
Code:10002, Msg: "invalid token"。
Code:10003, Msg: "invalid operate"。
Msg
String
暂无意义。
SuccResult
Map<String, JsonElement>
成功操作的实例结果映射:
key:云手机实例 ID。
value:该实例操作成功的返回结果对象,使用 JsonElement 封装,具体内容取决于操作类型,见具体操作接口说明。
FailResult
Map<String, JsonElement>
失败操作的实例结果映射:
key:云手机实例 ID。
value:该实例操作失败的返回结果对象,使用 JsonElement 封装,通常包含错误码和错误信息。例如:
{
"Code": 10100,
"Msg": "cai operation denied"
}

使用示例

AndroidInstance instance = TcrSdk.getInstance().getAndroidInstance();
Map<String, JsonObject> params = new HashMap<>();
String[] instanceIds = {"instance1", "instance2"};
for (String instanceId : instanceIds) {
JsonObject param = new JsonObject();
param.addProperty("Width", 1080);
param.addProperty("Height", 1920);
param.addProperty("DPI", 420);
params.put(instanceId, param);
}
AsyncCallback<BatchTaskResponse> callback = new AsyncCallback<BatchTaskResponse>() {
public void onSuccess(BatchTaskResponse response) {
// 遍历成功实例
for (Entry<String, JsonElement> entry : response.SuccResult.entrySet()) {
String instanceId = entry.getKey();
JsonElement result = entry.getValue();
// 处理结果
}
// 遍历失败实例
for (Entry<String, JsonElement> entry : response.FailResult.entrySet()) {
String instanceId = entry.getKey();
JsonElement result = entry.getValue();
// 处理错误
}
}

@Override
public void onFailure(int code, String msg) {
// 处理错误
Log.e(TAG, "Operation failed: " + code + ", " + msg);
}
};
instance.setResolution(params, callback);