接口概览
初始化与配置接口
方法 | 描述 |
设置日志记录器和最小日志级别。 | |
创建一个新的 TcrSession 实例。 | |
销毁一个 TcrSession 对象。 | |
获取 Android 实例操作对象。 | |
更新所有实例的访问令牌。 |
云手机操作接口
方法 | 描述 |
设置截图事件。 | |
停止截图事件。 | |
通过安卓 Messenger 发送消息。 | |
获取实例截图信息。 | |
向云端实例上传文件。 | |
向云端实例上传媒体文件。 | |
获取实例下载地址。 | |
获取 logcat 日志下载地址。 | |
批量设置设备 GPS 位置信息。 | |
批量设置设备分辨率。 | |
批量粘贴文本到设备。 | |
批量发送文本到设备剪贴板。 | |
批量执行摇一摇操作。 | |
批量执行吹一吹操作。 | |
批量设置设备传感器信息。 | |
批量发送 Messenger 消息。 | |
批量查询实例属性。 | |
查询已安装第三方应用。 | |
批量卸载应用。 | |
批量启动应用。 | |
批量停止应用。 | |
批量清除应用数据。 | |
批量启用应用。 | |
批量禁用应用。 | |
批量在摄像头播放媒体文件。 | |
批量停止摄像头媒体播放。 | |
批量查询摄像头播放状态。 | |
批量在摄像头显示图片。 | |
修改前台应用保活状态。 | |
查询前台应用保活状态。 | |
批量添加后台保活应用。 | |
批量移除后台保活应用。 | |
批量设置后台保活列表。 | |
批量查询后台保活列表。 | |
批量清空后台保活列表。 | |
批量设置设备静音。 | |
批量搜索媒体库文件。 | |
批量重启设备。 | |
批量查询所有应用列表。 | |
批量关闭应用到后台。 | |
批量新增应用安装黑名单。 | |
批量移除应用安装黑名单。 | |
批量覆盖应用安装黑名单。 | |
批量查询应用安装黑名单。 | |
批量清空应用安装黑名单。 | |
批量获取导航栏可见状态。 | |
获取系统媒体音量。 |
会话连接接口
会话事件回调接口
方法 | 描述 |
会话事件回调接口。 |
会话初始化与配置接口
方法 | 描述 |
初始化会话,设置参数和代理。 | |
设置会话观察者。 |
云实例连接接口
方法 | 描述 |
启动会话,在本地会话对象初始化成功后,调用此方法以建立和指定 ID 的云手机的连接。在成功建立连接后,此会话对象才能与指定的云手机进行交互。 | |
释放会话,客户端释放本地会话资源。云端会在自动检测到心跳消失后释放云端资源。 |
会话操作接口
方法 | 描述 |
获取当前连接的请求 ID。 | |
设置渲染视图。 | |
设置视频接收器。 | |
设置音频接收器。 | |
启用音频播放。 | |
启用本地音频。 | |
启用本地视频。 |
上下行流控制接口
方法 | 描述 |
暂停媒体流。 | |
恢复媒体流。 | |
设置本地视频配置。 | |
设置远程音频配置。 | |
向云应用粘贴文本。 | |
向云设备输入文本。 | |
禁用云输入。 | |
发送自定义音频数据。 |
云端外设交互接口
方法 | 描述 |
获取云键盘接口。 | |
获取云鼠标接口。 | |
获取云游戏手柄接口。 | |
获取云触摸屏接口。 | |
获取云运动传感器接口。 | |
发送按键消息。 |
触摸屏接口
运动传感器接口
方法 | 描述 |
传感器数据变化事件。 | |
位置变化事件。 | |
模拟传感器事件。 |
鼠标接口
方法 | 描述 |
云鼠标点击事件。 | |
云鼠标滚轮滚动事件。 | |
云鼠标相对移动事件。 | |
云鼠标移动事件。 |
键盘接口
方法 | 描述 |
云键盘按键事件。 | |
区分左右键的云键盘按键事件。 | |
查询云虚拟键盘的大小写锁定状态。 | |
重置云虚拟键盘的大小写锁定状态。 | |
重置云键盘按键状态。 |
游戏手柄接口
方法 | 描述 |
连接虚拟游戏手柄。 | |
断开虚拟游戏手柄。 | |
云游戏手柄按键事件。 | |
云游戏手柄摇杆事件。 | |
云游戏手柄触发器事件。 |
音视频帧回调接口
方法 | 描述 |
解码后的视频帧数据回调。 | |
音频数据回调。 |
音频会话代理接口
方法 | 描述 |
设置音频会话类别。 | |
设置音频会话模式。 | |
设置音频会话活动状态。 |
接口详细说明
配置 Token 和 AccessInfo
接口原型
- (void)setTcrConfig:(TcrConfig*) tcrConfig error:(NSError**)error;
输入参数
参数名称 | 必选 | 类型 | 描述 |
tcrConfig | 是 | TcrConfig* | 会话配置信息,通过业务后端调用云 API CreateAndroidInstancesAccessToken 获得。 |
error | 否 | NSError** | 输出错误信息。 |
返回值
无
调用示例
TcrConfig *config = [[TcrConfig alloc] initWithToken:@"your_token" accessInfo:@"your_access_info"];NSError *error = nil;[[TcrSdkInstance sharedInstance] initWithTcrConfig:config error:&error];if (error) {NSLog(@"初始化失败: %@", error);}
设置日志
接口原型
+ (void)setLogger:(id<TCRLogDelegate> _Nonnull)logger withMinLevel:(TCRLogLevel)minLevel;
输入参数
参数名称 | 必选 | 类型 | 描述 |
logger | 是 | id<TCRLogDelegate> | 日志代理。 |
minLevel | 是 | TCRLogLevel | 最小日志级别。 |
返回值
无
调用示例
id<TCRLogDelegate> logger = ^(TCRLogLevel logLevel, NSString *log) {NSLog(@"[SDK Log] Level: %@, Message: %@", NSStringFromTCRLogLevel(logLevel), log);};[TCrSdkInstance setLogger:logger withMinLevel:TCRLogLevelInfo];
创建会话
接口原型
- (TcrSession*)createSessionWithParams:(NSDictionary*)params;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 否 | NSDictionary* | 包含 TcrSession 配置参数的字典。 |
参数选择如下:
"preferredCodec"
:可选值为 "H264"
, "H265"
, "VP8"
, 和 "VP9"
。用于设置首选的编解码器。如果设置了此字段,会尝试使用首选编解码器进行通信。如果首选编解码器不可用,将使用其他可用的编解码器。如果未设置此字段或设置无效,将使用默认编解码器。"preferredCodecList"
:值为 NSArray,包含可选值 "H264"
, "H265"
, "VP8"
, 和 "VP9"
。表示优先选择的编解码器列表,列表中元素的顺序表示优先级。例如,索引0为最高优先级的编解码器。如果无法选择设置的编解码器,则会选择其他可用的编解码器。"idleThreshold"
:空闲检测阈值,即用户无活动的时间。单位为毫秒。当达到此阈值时,将触发事件 TcrEvent.CLIENT_IDLE
。"local_video"
:可选值为布尔类型。用于启用本地摄像头。"local_audio"
:可选值为布尔类型。用于启用本地麦克风。"enableCustomAudioCapture"
:@{@"sampleRate": NSInteger, @"useStereoInput": BOOL},启用自定义音频捕获并设置自定义捕获音频的采样率和通道数(两个参数都是必需的)。例如,@"enableCustomAudioCapture":@{@"sampleRate":@(48000), @"useStereoInput":@(false)}
表示采样率为48000的单声道数据。此外,要启用自定义音频捕获,还需要将 "local_audio"
设置为启用本地音频上行。返回值
类型 | 描述 |
TcrSession* | 新创建的 TcrSession 实例,如果创建失败则返回 nil。 |
调用示例
NSDictionary *sessionParams = @{@"preferredCodec": @"H264",@"idleThreshold": @(30000),@"local_video": @YES,@"local_audio": @YES};TcrSession *session = [[TcrSdkInstance sharedInstance] createSessionWithParams:sessionParams];if (!session) {NSLog(@"创建会话失败");}
销毁会话
接口原型
-(void)destroySession:(TcrSession*) session;
输入参数
参数名称 | 必选 | 类型 | 描述 |
session | 是 | TcrSession* | 要销毁的会话对象。 |
返回值
无
调用示例
[[TcrSdkInstance sharedInstance] destroySession:session];
获取 Android 实例
接口原型
- (AndroidInstance*)getAndroidInstance;
返回值
类型 | 描述 |
AndroidInstance* | 返回 Android 实例操作对象,如果未初始化则返回 nil。 |
调用示例
AndroidInstance *androidInstance = [[TcrSdkInstance sharedInstance] getAndroidInstance];if (!androidInstance) {NSLog(@"获取Android实例失败");}
更新令牌
接口原型
- (void)updateTokens:(NSString *)token;
输入参数
参数名称 | 必选 | 类型 | 描述 |
token | 是 | NSString* | 新的访问令牌字符串。 |
返回值
无
调用示例
[[TcrSdkInstance sharedInstance] updateTokens:@"new_token"];
设置截图事件
接口原型
- (void)setImageEventWithInterval:(NSInteger)interval quality:(nullable NSNumber *)quality screenshotWidth:(int)screenshotWidth screenshotHeight:(int)screenshotHeight;
输入参数
参数名称 | 必选 | 类型 | 描述 |
interval | 是 | NSInteger | 截图事件的间隔(毫秒)。 |
quality | 否 | NSNumber* | 截图质量(0-100,可选)。 |
screenshotWidth | 是 | int | 截图宽度。 |
screenshotHeight | 是 | int | 截图高度。 |
调用示例
[androidInstance setImageEventWithInterval:1000 quality:@(50) screenshotWidth:1080 screenshotHeight:1920];
停止截图事件
接口原型
- (void)stopImageEvent;
输入参数
无
调用示例
[androidInstance stopImageEvent];
通过安卓 Messenger 发送消息
接口原型
- (void)transMessageWithPackageName:(NSString *_Nonnull)packageName message:(NSString *_Nonnull)message;
输入参数
参数名称 | 必选 | 类型 | 描述 |
packageName | 是 | NSString* | 应用包名。 |
message | 是 | NSString* | 消息内容。 |
调用示例
[androidInstance transMessageWithPackageName:@"com.example.app" message:@"Hello World"];
获取实例截图信息
接口原型
- (NSString * _Nullable)getInstanceImageWithInstanceId:(NSString *_Nonnull)instanceId;
输入参数
参数名称 | 必选 | 类型 | 描述 |
instanceId | 是 | NSString* | 实例 ID。 |
调用示例
NSString *screenshotURL = [androidInstance getInstanceImageWithInstanceId:@"cai-device-001"];
向云端实例上传文件
接口原型
- (void)uploadWithInstanceId:(NSString *_Nonnull)instanceId files:(nullable NSArray<CaiUploadFileItem *> *)files completion: (nullable CaiUploadFilesCompletion)completion;
注意:
只允许将文件上传至/sdcard/目录下。
输入参数
参数名称 | 必选 | 类型 | 描述 |
instanceId | 是 | NSString* | 实例 ID。 |
files | 是 | NSArray<CaiUploadFileItem > | 上传的文件。 |
completion | 否 | CaiUploadFilesCompletion | 任务完成的回调。 |
调用示例
NSMutableArray<CaiUploadFileItem*>* files = [NSMutableArray new];CaiUploadFileItem* itemMp4 = [CaiUploadFileItem new];itemMp4.fileName = @"movie.mp4";itemMp4.filePath = @"/sdcard/media";itemMp4.fileData = [self dataForAssetNamed:@"movie" ofType:@"mp4"];[files addObject:itemMp4];[androidInstance uploadWithInstanceId:@"cai-device-001" files:files completion:^(CaiUploadResponse *response, NSError *error) {if (error) {NSLog(@"系统错误: %@", error);return;}if (response.code != 0) {NSLog(@"上传文件失败: [%ld] %@", (long)response.code, response.msg);return;}NSLog(@"上传文件成功: %@", response.fileStatus);}];
向云端实例上传媒体文件
接口原型
- (void)uploadMediaWithInstanceId:(NSString *_Nonnull)instanceId files:(nullable NSArray<CaiUploadMediaFileItem *> *)files completion: (nullable CaiUploadMediaFilesCompletion)completion;
说明:
此接口会将文件固定上传至/data/media/0/DCIM,上传完毕会通知系统添加媒体文件到相册中。
输入参数
参数名称 | 必选 | 类型 | 描述 |
instanceId | 是 | NSString* | 实例 ID。 |
files | 是 | NSArray<CaiUploadMediaFileItem > | 上传的媒体文件。 |
completion | 否 | CaiUploadFilesCompletion | 任务完成的回调。 |
调用示例
NSMutableArray<CaiUploadMediaFileItem*>* files = [NSMutableArray new];CaiUploadMediaFileItem* itemMp4 = [CaiUploadMediaFileItem new];itemMp4.fileName = @"movie.mp4";itemMp4.fileData = [self dataForAssetNamed:@"movie" ofType:@"mp4"]; // 加载文件至NSData*[files addObject:itemMp4];[androidInstance uploadWithInstanceId:@"cai-device-001" files:files completion:^(CaiUploadResponse *response, NSError *error) {if (error) {NSLog(@"系统错误: %@", error);return;}if (response.code != 0) {NSLog(@"上传文件失败: [%ld] %@", (long)response.code, response.msg);return;}NSLog(@"上传文件成功");}];
获取实例下载地址
接口原型
- (NSString *_Nonnull)getInstanceDownloadAddressWithInstanceId:(NSString *_Nonnull)instanceId path:(NSString *_Nonnull)path;
说明:
只允许下载/sdcard/目录下文件。
下载文件夹时会自动压缩为 zip 进行下载。
单实例下载限速10MB/s,同实例多个下载请求共享该限速。
输入参数
参数名称 | 必选 | 类型 | 描述 |
instanceId | 是 | NSString* | 实例 ID。 |
path | 是 | NSString* | 下载路径。 |
调用示例
NSString *downloadURL = [androidInstance getInstanceDownloadAddressWithInstanceId:@"cai-device-001" path:@"/sdcard/downloads/example.txt"];
获取logcat日志下载地址
接口原型
- (NSString *_Nonnull)getInstanceDownloadLogcatAddressWithInstanceId:(NSString *_Nonnull)instanceId recentDay:(int)recentDay;
输入参数
参数名称 | 必选 | 类型 | 描述 |
instanceId | 是 | NSString* | 实例 ID。 |
recentDay | 是 | int | 最近几天的日志。 |
调用示例
NSString *logcatURL = [androidInstance getInstanceDownloadLogcatAddressWithInstanceId:@"cai-device-001" recentDay:7];
批量设置设备 GPS 位置信息
接口原型
- (void)setLocationWithParams:(NSDictionary<NSString *, NSDictionary *> *_Nonnull)params completion:(CaiBatchTaskCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 位置信息参数字典,结构为: { @"Longitude": @(经度值), // 经度 (double) @"Latitude": @(纬度值) // 纬度 (double) } |
completion | 否 | CaiBatchTaskCompletion | 任务完成的回调。 |
调用示例
NSDictionary *locations = @{@"cai-device-001": @{@"Longitude": @113.32412, @"Latitude": @23.124124},@"cai-device-002": @{@"Longitude": @114.32412, @"Latitude": @24.124124}};[androidInstance setLocationWithParams:locations completion:^(CaiBatchTaskResponse * _Nonnull response, NSError * _Nullable error) {if (error) {NSLog(@"系统错误: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"位置设置成功: %@", response.deviceResponses);}];
批量设置设备分辨率
接口原型
- (void)setResolutionWithParams:(NSDictionary<NSString *, NSDictionary *> *_Nonnull)params completion:(CaiBatchTaskCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 分辨率参数字典,结构为: { "Width": "宽度像素 (NSInteger)", "Height": "高度像素 (NSInteger)", "DPI": "像素密度 (NSInteger,可选)" } |
completion | 否 | CaiBatchTaskCompletion | 任务完成的回调。 |
调用示例
NSDictionary *resolutions = @{@"cai-device-001": @{@"Width": @720, @"Height": @1280, @"DPI": @240},@"cai-device-002": @{@"Width": @1080, @"Height": @1920}};[androidInstance setResolutionWithParams:resolutions completion:^(CaiBatchTaskResponse * _Nonnull response, NSError * _Nullable error) {if (error) {NSLog(@"系统错误: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"设置成功: %@", response.deviceResponses);}];
批量粘贴文本到设备
接口原型
- (void)pasteWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params completion:(CaiBatchTaskCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 粘贴文本参数字典,结构为: { @"Text": @"粘贴文本" // 要粘贴的文本内容 (NSString) } |
completion | 否 | CaiBatchTaskCompletion | 任务完成的回调。 |
调用示例
NSDictionary *texts = @{@"cai-device-001": @{@"Text": @"Hello World"},@"cai-device-002": @{@"Text": @"粘贴测试文本"}};[androidInstance pasteWithParams:texts completion:^(CaiBatchTaskResponse * _Nonnull response, NSError * _Nullable error) {if (error) {NSLog(@"系统错误: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
批量发送文本到设备剪切板
接口原型
- (void)sendClipboardWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params completion:(CaiBatchTaskCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 剪切板文本参数字典,结构为: { @"Text": @"剪切板内容" // 要复制到剪切板的文本 (NSString) } |
completion | 否 | CaiBatchTaskCompletion | 任务完成的回调。 |
调用示例
NSDictionary *clipboardTexts = @{@"cai-device-001": @{@"Text": @"剪切板测试内容"},@"cai-device-002": @{@"Text": @"这是第二台设备的文本"}};[androidInstance sendClipboardWithParams:clipboardTexts completion:^(CaiBatchTaskResponse *response, NSError *error) {if (error) {NSLog(@"系统错误: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
批量执行摇一摇操作
接口原型
- (void)shakeWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params completion:(CaiBatchTaskCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 设备参数字典,结构为: @{} |
completion | 否 | CaiBatchTaskCompletion | 任务完成的回调。 |
调用示例
NSDictionary *devices = @{@"cai-device-001": @{},@"cai-device-002": @{}};[androidInstance shakeWithParams:devices completion:^(CaiBatchTaskResponse *response, NSError *error) {if (error) {NSLog(@"系统错误: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
批量执行吹一吹操作
接口原型
- (void)blowWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params completion:(CaiBatchTaskCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 设备参数字典,结构为: @{} |
completion | 否 | CaiBatchTaskCompletion | 任务完成的回调。 |
调用示例
NSDictionary *devices = @{@"cai-device-001": @{},@"cai-device-002": @{}};[androidInstance blowWithParams:devices completion:^(CaiBatchTaskResponse *response, NSError *error) {if (error) {NSLog(@"系统错误: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
批量设置设备传感器信息
接口原型
- (void)setSensorWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params completion:(CaiBatchTaskCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 操作参数字典,结构为: { @"Type": sensorType, // 传感器类型字符串 ( @"accelerometer"/@"gyroscope") @"Values": valuesArray // 传感器数值数组 ( @[ @(xValue), @(yValue), @(zValue) ]) } |
completion | 否 | CaiBatchTaskCompletion | 任务完成的回调。 |
调用示例
NSDictionary *sensorData = @{@"cai-device-001": @{@"Type": @"accelerometer", @"Values": @[ @1.5, @0.2, @9.8 ]},@"cai-device-002": @{@"Type": @"gyroscope", @"Values": @[ @0.5, @0.0, @1.2 ]}};[androidInstance setSensorWithParams:sensorData completion:^(CaiBatchTaskResponse *response, NSError *error) {if (error) {NSLog(@"系统错误: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
批量发送 Messenger 消息
接口原型
- (void)sendTransMessageWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)params completion:(CaiBatchTaskCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 消息参数字典,结构为: { @"PackageName": @"应用包名", // 接收消息的应用包名 (NSString) @"Msg": @"消息内容" // 要发送的自定义消息 (NSString) } |
completion | 否 | CaiBatchTaskCompletion | 任务完成的回调。 |
调用示例
NSDictionary *messages = @{@"cai-device-001": @{@"PackageName": @"com.example.app", @"Msg": @"命令更新"},@"cai-device-002": @{@"PackageName": @"com.demo.app", @"Msg": @"数据同步"}};[androidInstance sendTransMessageWithParams:messages completion:^(CaiBatchTaskResponse *response, NSError *error) {if (error) {NSLog(@"系统错误: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
批量查询实例属性
接口原型
- (void)describeInstancePropertiesWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)paramscompletion:(nullable CaiDescribeInstancePropertiesCompletion)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 设备参数字典,结构为: @{} |
completion | 否 | CaiDescribeInstancePropertiesCompletion | 完成回调。 |
调用示例
NSDictionary *devices = @{@"cai-device-001": @{}, @"cai-device-002": @{}};[androidInstance describeInstancePropertiesWithParams:devices completion:^(CaiDescribeInstancePropertiesResponse *response, NSError *error) {if (error) {NSLog(@"系统错误: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
查询已安装第三方应用
接口原型
- (void)listUserAppsWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)paramscompletion:(CaiListUserAppsCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 设备参数字典,结构为 @{} |
completion | 否 | CaiListUserAppsCompletion | 完成回调。 |
调用示例
NSDictionary *devices = @{@"cai-device-001": @{}, @"cai-device-002": @{}};[androidInstance listUserAppsWithParams:devices completion:^(CaiListUserAppsResponse *response, NSError *error) {if (error) {NSLog(@"查询失败: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;},NSLog(@"操作成功: %@", response.deviceResponses);}];
批量卸载应用
接口原型
- (void)unInstallByPackageNameWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)paramscompletion:(CaiBatchTaskCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 卸载参数字典,结构为: { @"PackageName": @"应用包名" // 要卸载的应用包名 (NSString) } |
completion | 否 | CaiBatchTaskCompletion | 任务完成的回调。 |
调用示例
NSDictionary *uninstallParams = @{@"cai-device-001": @{@"PackageName": @"com.unwanted.app"}};[androidInstance unInstallByPackageNameWithParams:uninstallParams completion:^(CaiBatchTaskResponse *response, NSError *error) {if (error) {NSLog(@"卸载失败: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
批量启动应用
接口原型
- (void)startAppWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)paramscompletion:(CaiBatchTaskCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 启动参数字典,结构为: { @"PackageName": @"应用包名", // 应用包名 (NSString) @"ActivityName": @"Activity" // Activity名称 (NSString) } |
completion | 否 | CaiBatchTaskCompletion | 任务完成的回调。 |
调用示例
NSDictionary *startParams = @{@"cai-device-001": @{@"PackageName": @"com.launch.app", @"ActivityName": @"MainActivity"}};[androidInstance startAppWithParams:startParams completion:^(CaiBatchTaskResponse *response, NSError *error) {if (error) {NSLog(@"启动失败: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
批量停止应用
接口原型
- (void)stopAppWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)paramscompletion:(CaiBatchTaskCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 停止参数字典,结构为: { @"PackageName": @"应用包名" // 要停止的应用包名 (NSString) } |
completion | 否 | CaiBatchTaskCompletion | 任务完成的回调。 |
调用示例
NSDictionary *stopParams = @{@"cai-device-001": @{@"PackageName": @"com.running.app"}};[androidInstance stopAppWithParams:stopParams completion:^(CaiBatchTaskResponse *response, NSError *error) {if (error) {NSLog(@"停止失败: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
批量清除应用数据
接口原型
- (void)clearAppDataWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)paramscompletion:(CaiBatchTaskCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 清除参数字典,结构为: { @"PackageName": @"应用包名" // 要清除数据的应用包名 (NSString) } |
completion | 否 | CaiBatchTaskCompletion | 任务完成的回调。 |
调用示例
NSDictionary *clearParams = @{@"cai-device-001": @{@"PackageName": @"com.cache.heavy"}};[androidInstance clearAppDataWithParams:clearParams completion:^(CaiBatchTaskResponse *response, NSError *error) {if (error) {NSLog(@"清除失败: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
批量启用应用
接口原型
- (void)enableAppWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)paramscompletion:(CaiBatchTaskCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 启用参数字典,结构为: { @"PackageName": @"应用包名" // 要启用的应用包名 (NSString) } |
completion | 否 | CaiBatchTaskCompletion | 任务完成的回调。 |
调用示例
NSDictionary *enableParams = @{@"cai-device-001": @{@"PackageName": @"com.disabled.app"}};[androidInstance enableAppWithParams:enableParams completion:^(CaiBatchTaskResponse *response, NSError *error) {if (error) {NSLog(@"启用失败: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
批量禁用应用
接口原型
- (void)disableAppWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)paramscompletion:(CaiBatchTaskCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 禁用参数字典,结构为: { @"PackageName": @"应用包名" // 要禁用的应用包名 (NSString) } |
completion | 否 | CaiBatchTaskCompletion | 任务完成的回调。 |
调用示例
NSDictionary *disableParams = @{@"cai-device-001": @{@"PackageName": @"com.disabled.app"}};[androidInstance disableAppWithParams:disableParams completion:^(CaiBatchTaskResponse *response, NSError *error) {if (error) {NSLog(@"禁用失败: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
批量在摄像头播放媒体文件
接口原型
- (void)startCameraMediaPlayWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)paramscompletion:(CaiBatchTaskCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 播放参数字典,结构为: { @"FilePath": @"视频文件路径", // 视频文件路径 (NSString) @"Loops": @(循环次数) // 循环次数 (NSInteger,负数表示无限循环) } |
completion | 否 | CaiBatchTaskCompletion | 任务完成的回调。 |
调用示例
NSDictionary *playParams = @{@"cai-device-001": @{@"FilePath": @"/sdcard/video.mp4", @"Loops": @3}};[androidInstance startCameraMediaPlayWithParams:playParams completion:^(CaiBatchTaskResponse *response, NSError *error) {if (error) {NSLog(@"播放媒体文件失败: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
批量停止摄像头媒体播放
接口原型
- (void)stopCameraMediaPlayWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)paramscompletion:(CaiBatchTaskCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 设备参数字典,结构是: @{} |
completion | 否 | CaiBatchTaskCompletion | 任务完成的回调。 |
调用示例
NSDictionary *stopParams = @{@"cai-device-001": @{}};[androidInstance stopCameraMediaPlayWithParams:stopParams completion:^(CaiBatchTaskResponse *response, NSError *error) {if (error) {NSLog(@"停止播放媒体文件失败: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
批量查询摄像头播放状态
接口原型
- (void)describeCameraMediaPlayStatusWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)paramscompletion:(CaiDescribeCameraMediaPlayStatusCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 设备参数字典,结构是: @{} |
completion | 否 | CaiDescribeCameraMediaPlayStatusCompletion | 任务完成的回调。 |
调用示例
NSDictionary *params = @{@"cai-device-001": @{}};[androidInstance describeCameraMediaPlayStatusWithParams:params completion:^(CaiDescribeCameraMediaPlayStatusResponse *response, NSError *error) {if (error) {NSLog(@"查询摄像头播放状态失败: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
批量在摄像头显示图片
接口原型
- (void)displayCameraImageWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)paramscompletion:(CaiBatchTaskCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 图片参数字典,结构是: { @"FilePath": @"图片文件路径" } |
completion | 否 | CaiBatchTaskCompletion | 任务完成的回调。 |
调用示例
NSDictionary *imageParams = @{@"cai-device-001": @{@"FilePath": @"/sdcard/image.jpg"}};[androidInstance displayCameraImageWithParams:imageParams completion:^(CaiBatchTaskResponse *response, NSError *error) {if (error) {NSLog(@"显示图片失败: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
修改前台应用保活状态
接口原型
- (void)modifyKeepFrontAppStatusWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)paramscompletion:(CaiBatchTaskCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 保活参数字典,结构为: { @"PackageName": @"应用包名", // 应用包名 (NSString) @"Enable": @(YES/NO), // 是否启用保活 (BOOL) @"RestartInterValSeconds": @(秒数) // 重新拉起最长间隔 (NSInteger) } |
completion | 否 | CaiBatchTaskCompletion | 任务完成的回调。 |
调用示例
NSDictionary *keepFrontAppParams = @{@"cai-device-001": @{@"PackageName": @"com.example.app", @"Enable": @YES, @"RestartInterValSeconds": @5}};[androidInstance modifyKeepFrontAppStatusWithParams:keepFrontAppParams completion:^(CaiBatchTaskResponse *response, NSError *error) {if (error) {NSLog(@"修改保活状态失败: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
查询前台应用保活状态
接口原型
- (void)describeKeepFrontAppStatusWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)paramscompletion:(CaiDescribeKeepFrontAppStatusCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 设备参数字典,结构为: @{} |
completion | 否 | CaiDescribeKeepFrontAppStatusCompletion | 任务完成的回调。 |
调用示例
NSDictionary *params = @{@"cai-device-001": @{}};[androidInstance describeKeepFrontAppStatusWithParams:params completion:^(CaiDescribeKeepFrontAppStatusResponse *response, NSError *error) {if (error) {NSLog(@"查询保活状态失败: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
批量添加后台保活应用
接口原型
- (void)addKeepAliveListWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)paramscompletion:(CaiBatchTaskCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 保活参数字典,结构为: { @"AppList": @[@"应用包名1", @"应用包名2"] // 应用包名数组 (NSArray<NSString*>) } |
completion | 否 | CaiBatchTaskCompletion | 任务完成的回调。 |
调用示例
NSDictionary *keepAliveParams = @{@"cai-device-001": @{@"AppList": @[@"com.wechat", @"com.alipay"]}};[androidInstance addKeepAliveListWithParams:keepAliveParams completion:^(CaiBatchTaskResponse *response, NSError *error) {if (error) {NSLog(@"添加后台保活应用失败: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
批量移除后台保活应用
接口原型
- (void)removeKeepAliveListWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)paramscompletion:(CaiBatchTaskCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 移除参数字典,结构为: { @"AppList": @[@"应用包名1", @"应用包名2"] // 应用包名数组 (NSArray<NSString*>) } |
completion | 否 | CaiBatchTaskCompletion | 任务完成的回调。 |
调用示例
NSDictionary *removeParams = @{@"cai-device-001": @{@"AppList": @[@"com.wechat", @"com.alipay"]}};[androidInstance removeKeepAliveListWithParams:removeParams completion:^(CaiBatchTaskResponse *response, NSError *error) {if (error) {NSLog(@"移除后台保活应用失败: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
批量设置后台保活列表
接口原型
- (void)setKeepAliveListWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)paramscompletion:(CaiBatchTaskCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 保活参数字典,结构为: { @"AppList": @[@"应用包名1", @"应用包名2"] // 应用包名数组 (NSArray<NSString*>) } |
completion | 否 | CaiBatchTaskCompletion | 任务完成的回调。 |
调用示例
NSDictionary *keepAliveListParams = @{@"cai-device-001": @{@"AppList": @[@"com.wechat", @"com.alipay"]}};[androidInstance setKeepAliveListWithParams:keepAliveListParams completion:^(CaiBatchTaskResponse *response, NSError *error) {if (error) {NSLog(@"设置后台保活列表失败: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
批量查询后台保活列表
接口原型
- (void)describeKeepAliveListWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)paramscompletion:(CaiDescribeKeepAliveListCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 设备参数字典,结构为@{} |
completion | 否 | CaiDescribeKeepAliveListCompletion | 任务完成的回调。 |
调用示例
NSDictionary *params = @{@"cai-device-001": @{}};[androidInstance describeKeepAliveListWithParams:params completion:^(CaiDescribeKeepAliveListResponse *response, NSError *error) {if (error) {NSLog(@"查询失败: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
批量清空后台保活列表
接口原型
- (void)clearKeepAliveListWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)paramscompletion:(CaiBatchTaskCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 设备参数字典,结构为@{} |
completion | 否 | CaiBatchTaskCompletion | 任务完成的回调。 |
调用示例
NSDictionary *params = @{@"cai-device-001": @{}};[androidInstance clearKeepAliveListWithParams: params completion:^(CaiBatchTaskResponse *response, NSError *error) {if (error) {NSLog(@"清空失败: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
批量设置设备静音
接口原型
- (void)muteWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)paramscompletion:(CaiBatchTaskCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 静音参数字典,结构为: { @"Mute": @(YES/NO) // 静音状态 (BOOL,YES:静音, NO:取消静音) }, |
completion | 否 | CaiBatchTaskCompletion | 任务完成的回调。 |
调用示例
NSDictionary *muteParams = @{@"cai-device-001": @{@"Mute": @YES}};[androidInstance muteWithParams:muteParams completion:^(CaiBatchTaskResponse *response, NSError *error) {if (error) {NSLog(@"设置静音失败: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
批量搜索媒体库文件
接口原型
- (void)mediaSearchWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)paramscompletion:(CaiMediaSearchCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 搜索参数字典,结构为: { @"Keyword": @"搜索关键词" // 搜索关键词 (NSString) } |
completion | 否 | CaiMediaSearchCompletion | 任务完成的回调。 |
调用示例
NSDictionary *searchParams = @{@"cai-device-001": @{@"Keyword": @"搜索关键词"}};[androidInstance mediaSearchWithParams:searchParams completion:^(CaiMediaSearchResponse *response, NSError *error) {if (error) {NSLog(@"搜索失败: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
批量重启设备
接口原型
- (void)rebootWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)paramscompletion:(CaiBatchTaskCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 设备参数字典,结构为@{} |
completion | 否 | CaiBatchTaskCompletion | 任务完成的回调。 |
调用示例
NSDictionary *rebootParams = @{@"cai-device-001": @{}};[androidInstance rebootWithParams:rebootParams completion:^(CaiBatchTaskResponse *response, NSError *error) {if (error) {NSLog(@"重启失败: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
批量查询所有应用列表
接口原型
- (void)listAllAppsWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)paramscompletion:(CaiListAllAppsCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 设备参数字典,结构为@{} |
completion | 否 | CaiListAllAppsCompletion | 任务完成的回调。 |
调用示例
NSDictionary *params = @{@"cai-device-001": @{}};[androidInstance listAllAppsWithParams:params completion:^(CaiListAllAppsResponse *response, NSError *error) {if (error) {NSLog(@"查询失败: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
批量关闭应用到后台
接口原型
- (void)moveAppBackgroundWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)paramscompletion:(CaiBatchTaskCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 设备参数字典,结构为@{} |
completion | 否 | CaiBatchTaskCompletion | 任务完成的回调。 |
调用示例
NSDictionary *params = @{@"cai-device-001": @{}};[androidInstance moveAppBackgroundWithParams: params completion:^(CaiBatchTaskResponse *response, NSError *error) {if (error) {NSLog(@"移动应用到后台失败: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
批量新增应用安装黑名单
接口原型
- (void)addAppInstallBlackListWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)paramscompletion:(CaiBatchTaskCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 黑名单参数字典,结构为: { @"AppList": @[@"应用包名1", @"应用包名2"] // 应用包名数组 } |
completion | 否 | CaiBatchTaskCompletion | 任务完成的回调。 |
调用示例
NSDictionary *blacklistParams = @{@"cai-device-001": @{@"AppList": @[@"com.example.app"]}};[androidInstance addAppInstallBlackListWithParams: blacklistParams completion:^(CaiBatchTaskResponse *response, NSError *error) {if (error) {NSLog(@"新增应用安装黑名单失败: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
批量移除应用安装黑名单
接口原型
- (void)removeAppInstallBlackListWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)paramscompletion:(CaiBatchTaskCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 黑名单参数字典,结构为: { @"AppList": @[@"应用包名1", @"应用包名2"] // 应用包名数组 } |
completion | 否 | CaiBatchTaskCompletion | 任务完成的回调。 |
调用示例
NSDictionary *blacklistParams = @{@"cai-device-001": @{@"AppList": @[@"com.example.app"]}};[androidInstance removeAppInstallBlackListWithParams: blacklistParams completion:^(CaiBatchTaskResponse *response, NSError *error) {if (error) {NSLog(@"移除应用安装黑名单失败: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
批量覆盖应用安装黑名单
接口原型
- (void)setAppInstallBlackListWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)paramscompletion:(CaiBatchTaskCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 黑名单参数字典,结构为: { @"AppList": @[@"应用包名1", @"应用包名2"] // 应用包名数组 } |
completion | 否 | CaiBatchTaskCompletion | 任务完成的回调。 |
调用示例
NSDictionary *blacklistParams = @{@"cai-device-001": @{@"AppList": @[@"com.example.app"]}};[androidInstance setAppInstallBlackListWithParams: blacklistParams completion:^(CaiBatchTaskResponse *response, NSError *error) {if (error) {NSLog(@"覆盖应用安装黑名单失败: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
批量查询应用安装黑名单
接口原型
- (void)describeAppInstallBlackListWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)paramscompletion:(CaiDescribeAppInstallBlackListCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 设备参数字典,结构为@{} |
completion | 否 | CaiDescribeAppInstallBlackListCompletion | 任务完成的回调 |
调用示例
NSDictionary *params = @{@"cai-device-001": @{}};[androidInstance describeAppInstallBlackListWithParams: params completion:^(CaiDescribeAppInstallBlackListResponse *response, NSError *error) {if (error) {NSLog(@"查询应用安装黑名单失败: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
批量清空应用安装黑名单
接口原型
- (void)clearAppInstallBlackListWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)paramscompletion:(CaiBatchTaskCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 设备参数字典,结构为@{} |
completion | 否 | CaiBatchTaskCompletion | 任务完成的回调。 |
调用示例
NSDictionary *params = @{@"cai-device-001": @{}};[androidInstance clearAppInstallBlackListWithParams: params completion:^(CaiBatchTaskResponse *response, NSError *error) {if (error) {NSLog(@"清空应用安装黑名单失败: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
批量获取导航栏可见状态
接口原型
- (void)getNavVisibleStatusWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)paramscompletion:(CaiGetNavVisibleStatusCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 设备参数字典,结构为@{} |
completion | 否 | CaiGetNavVisibleStatusCompletion | 任务完成的回调。 |
调用示例
NSDictionary *params = @{@"cai-device-001": @{}};[androidInstance getNavVisibleStatusWithParams: params completion:^(CaiGetNavVisibleStatusResponse *response, NSError *error) {if (error) {NSLog(@"获取导航栏可见状态失败: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
获取系统媒体音量
接口原型
- (void)getSystemMusicVolumeWithParams:(NSDictionary<NSString *, NSDictionary *> * _Nonnull)paramscompletion:(CaiGetSystemMusicVolumeCompletion _Nullable)completion;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 是 | NSDictionary<NSString , NSDictionary *> | 设备参数字典,结构为@{} |
completion | 否 | CaiGetSystemMusicVolumeCompletion | 任务完成的回调。 |
调用示例
NSDictionary *params = @{@"cai-device-001": @{}};[androidInstance getSystemMusicVolumeWithParams: params completion:^(CaiGetSystemMusicVolumeResponse *response, NSError *error) {if (error) {NSLog(@"获取系统媒体音量失败: %@", error);return;}if (response.code != 0) {NSLog(@"整体操作失败: [%ld] %@", (long)response.code, response.message);return;}NSLog(@"操作成功: %@", response.deviceResponses);}];
会话事件回调
用于监听 TcrSession 内部事件。
接口原型
- (void)onEvent:(TcrEvent)event eventData:(id _Nullable)eventData;
输入参数
参数名称 | 必选 | 类型 | 描述 |
event | 是 | TcrEvent | 事件类型。 |
eventData | 否 | id | 事件数据。 |
调用示例
id<TcrSessionObserver> observer = ^(TcrEvent event, id eventData) {switch (event) {case STATE_CONNECTED:NSLog(@"会话已连接");break;case STATE_RECONNECTING:NSLog(@"会话重连中");break;case STATE_CLOSED:NSLog(@"会话关闭");break;case CLIENT_STATS:info = (NSDictionary *)eventData;NSLog(@"SDK性能数据:%@", info);break;// 其他事件处理...default:break;}};TcrSession *session = [[TcrSession alloc] initWithParams:nil andDelegate:observer];
会话初始化
接口原型
- (instancetype _Nonnull)initWithParams:(NSDictionary *_Nullable)params andDelegate:(id<TcrSessionObserver> _Nonnull)Observer;
输入参数
参数名称 | 必选 | 类型 | 描述 |
params | 否 | NSDictionary* | 会话参数。 |
Observer | 是 | id<TcrSessionObserver> | 会话观察者。 |
参数字典选择如下:
"preferredCodec"
:可选值为 "H264"
, "H265"
, "VP8"
, 和 "VP9"
。用于设置首选的编解码器。如果设置了此字段,会尝试使用首选编解码器进行通信。如果首选编解码器不可用,将使用其他可用的编解码器。如果未设置此字段或设置无效,将使用默认编解码器。"preferredCodecList"
:值为 NSArray,包含可选值 "H264"
, "H265"
, "VP8"
, 和 "VP9"
。表示优先选择的编解码器列表,列表中元素的顺序表示优先级,例如索引0为最高优先级的编解码器。如果无法选择设置的编解码器,则会选择其他可用的编解码器。"idleThreshold"
:空闲检测阈值,即用户无活动的时间。单位为毫秒。当达到此阈值时,将触发事件 TcrEvent.CLIENT_IDLE
。"local_video"
:可选值为布尔类型。用于启用本地摄像头。"local_audio"
:可选值为布尔类型。用于启用本地麦克风。"enableCustomAudioCapture"
:@{@"sampleRate": NSInteger, @"useStereoInput": BOOL},启用自定义音频捕获并设置自定义捕获音频的采样率和通道数(两个参数都是必需的)。例如,@"enableCustomAudioCapture":@{@"sampleRate":@(48000), @"useStereoInput":@(false)}
表示采样率为48000的单声道数据。此外,要启用自定义音频捕获,还需要将 "local_audio"
设置为启用本地音频上行。返回值
类型 | 描述 |
TcrSession* | 返回初始化后的会话实例。 |
调用示例
NSDictionary *params = @{@"idleThreshold": @(6000)};id<TcrSessionObserver> observer = ^(TcrEvent event, id eventData) {// 处理会话事件};TcrSession *session = [[TcrSession alloc] initWithParams: params andDelegate: observer];
设置会话观察者
用于监听 TcrSession 内部事件。
接口原型
- (void)setTcrSessionObserver:(id<TcrSessionObserver> _Nonnull)Observer;
输入参数
参数名称 | 必选 | 类型 | 描述 |
Observer | 是 | id<TcrSessionObserver> | 会话观察者。 |
返回值
无
调用示例
id<TcrSessionObserver> observer = ^(TcrEvent event, id eventData) {// 处理会话事件};[session setTcrSessionObserver:observer];
连接实例
接口原型
- (void)accessWithInstanceId:(NSString *_Nonnull)instanceId;
输入参数
参数名称 | 必选 | 类型 | 描述 |
instanceId | 是 | NSString* | 云实例 ID。 |
返回值
无
调用示例
[session accessWithInstanceId:@"cai-device-001"];
释放会话
接口原型
- (void)releaseSession;
输入参数
无
返回值
无
调用示例
[session releaseSession];
获取请求 ID
接口原型
- (NSString*_Nonnull)getRequestId;
返回值
类型 | 描述 |
NSString* | 当前会话的请求 ID。 |
调用示例
NSString *requestId = [session getRequestId];NSLog(@"当前会话的请求ID: %@", requestId);
设置渲染视图
设置本次会话的渲染视图,SDK 会将流内容渲染到该视图上。
接口原型
- (void)setRenderView:(TcrRenderView *_Nullable)renderView;
输入参数
参数名称 | 必选 | 类型 | 描述 |
renderView | 否 | TcrRenderView* | 渲染视图。 |
返回值
无
调用示例
TcrRenderView *renderView = [[TcrRenderView alloc] initWithFrame:self.view.frame] // 实例化TcrRenderView对象[session setRenderView:renderView];
设置视频接收器
为本次会话设置一个视频接收器。设置完成后,SDK 会将解码后的视频帧数据回调到该视频接收器。
接口原型
- (void)setVideoSink:(id<VideoSink> _Nullable)videoSink;
输入参数
参数名称 | 必选 | 类型 | 描述 |
videoSink | 否 | id<VideoSink> | 视频接收器。 |
返回值
无
调用示例
id<VideoSink> videoSink = ...; // 实现VideoSink协议的对象[session setVideoSink:videoSink];
设置音频接收器
为本次会话设置一个音频接收器。设置完成后,SDK 会将音频数据回调到该音频接收器。
接口原型
- (void)setAudioSink:(id<AudioSink> _Nullable)audioSink;
输入参数
参数名称 | 必选 | 类型 | 描述 |
audioSink | 否 | id<AudioSink> | 音频接收器。 |
返回值
无
调用示例
id<AudioSink> audioSink = ...; // 实现AudioSink协议的对象[session setAudioSink:audioSink];
启用音频播放
接口原型
- (void)setEnableAudioPlaying:(BOOL)enable;
输入参数
参数名称 | 必选 | 类型 | 描述 |
enable | 是 | BOOL | 是否启用音频播放。 |
返回值
无
调用示例
[session setEnableAudioPlaying:YES]; // 启用音频播放
启用本地音频
启用或禁用从麦克风捕获的本地音轨。启用后,本地捕获的音频会上行至云端。
接口原型
- (void)setEnableLocalAudio:(BOOL)enable;
输入参数
参数名称 | 必选 | 类型 | 描述 |
enable | 是 | BOOL | 是否启用本地音频。 |
返回值
无
调用示例
[session setEnableLocalAudio:YES]; // 启用本地音频
启用本地视频
启用或禁用从摄像头捕获的本地视频。启用后,本地捕获的视频画面会上行至云端。
接口原型
- (void)setEnableLocalVideo:(BOOL)enable;
输入参数
参数名称 | 必选 | 类型 | 描述 |
enable | 是 | BOOL | 是否启用本地视频。 |
返回值
无
调用示例
[session setEnableLocalVideo:YES]; // 启用本地视频
暂停音视频流
接口原型
- (void)pauseStreaming;
调用示例
[session pauseStreaming];
恢复音视频流
接口原型
- (void)resumeStreaming;
调用示例
[session resumeStreaming];
设置上行视频配置
接口原型
- (void)setLocalVideoProfile:(int)width height:(int)height fps:(int)fps minBitrate:(int)minBitrate maxBitrate:(int)maxBitrate isFrontCamera:(BOOL)isFrontCamera;
输入参数
参数名称 | 必选 | 类型 | 描述 |
width | 是 | int | 视频宽度。 |
height | 是 | int | 视频高度。 |
fps | 是 | int | 帧率。 |
minBitrate | 是 | int | 最小比特率。 |
maxBitrate | 是 | int | 最大比特率。 |
isFrontCamera | 是 | BOOL | 是否为前置摄像头。 |
返回值
无
调用示例
[session setLocalVideoProfile:1280 height:720 fps:30 minBitrate:1000 maxBitrate:15000 isFrontCamera:NO];
设置云端音频配置
接口原型
- (void)setRemoteAudioProfile:(float)volume;
输入参数
参数名称 | 必选 | 类型 | 描述 |
volume | 是 | float | 云端音频音量。 |
返回值
无
调用示例
[session setRemoteAudioProfile:5.0]; // 设置远程音频流的音量为5.0
向云应用粘贴文本
接口原型
- (void)pasteText:(NSString *_Nonnull)text;
输入参数
参数名称 | 必选 | 类型 | 描述 |
text | 是 | NSString* | 要粘贴的文本内容。 |
返回值
无
调用示例
[session pasteText:@"Hello, Cloud!"];
向云设备输入文本
此方法仅在客户端切换到本地输入法模式时可用。它会将文本直接发送到云端设备的输入框,并且不会更改本地剪贴板的内容。
接口原型
- (void)inputText:(NSString *_Nonnull)text mode:(BOOL)append;
输入参数
参数名称 | 必选 | 类型 | 描述 |
text | 是 | NSString* | 要输入的文本内容。 |
append | 是 | BOOL | 写入模式控制,是否追加写入。 |
返回值
无
调用示例
[session inputText:@"Hello" mode:YES]; // 追加模式(默认)[session inputText:@"New Text" mode:NO]; // 覆盖模式
禁用云端输入
当云输入被禁用时,云应用程序的软键盘将不会出现。
接口原型
- (void)setDisableCloudInput:(BOOL)disableCloudInput;
输入参数
参数名称 | 必选 | 类型 | 描述 |
disableCloudInput | 是 | BOOL | 是否禁用云端输入。 |
返回值
无
调用示例
[session setDisableCloudInput:YES]; // 禁用云输入
发送自定义音频数据
此方法仅在启用自定义音频捕获时有效。
接口原型
- (BOOL)sendCustomAudioData:(NSData *_Nonnull)audioData captureTimeNs:(uint64_t)captureTimeNs;
输入参数
参数名称 | 必选 | 类型 | 描述 |
audioData | 是 | NSData* | 要发送的 PCM 音频数据。 |
captureTimeNs | 是 | uint64_t | 音频捕获时间(纳秒)。 |
返回值
类型 | 描述 |
BOOL | 是否成功发送自定义音频数据。 |
调用示例
NSData *audioData = ...; // 获取音频数据uint64_t captureTimeNs = ...; // 音频捕获时间BOOL result = [session sendCustomAudioData:audioData captureTimeNs:captureTimeNs];if (result) {NSLog(@"成功发送自定义音频数据");} else {NSLog(@"发送自定义音频数据失败");}
获取键盘接口
接口原型
- (id<Keyboard> _Nonnull)getKeyboard;
返回值
类型 | 描述 |
id<Keyboard> | 云键盘接口。 |
调用示例
id<Keyboard> keyboard = [session getKeyboard];[keyboard onKeyboard:65 down:YES]; // 模拟按下键盘的A键[keyboard onKeyboard:65 down:NO]; // 模拟松开键盘的A键
获取鼠标接口
接口原型
- (id<Mouse> _Nonnull)getMouse;
返回值
类型 | 描述 |
id<Mouse> | 云鼠标接口。 |
调用示例
id<Mouse> mouse = [session getMouse];[mouse onMouseKey:LEFT isDown:YES]; // 模拟按下鼠标左键[mouse onMouseKey:LEFT isDown:NO]; // 模拟松开鼠标左键
获取游戏手柄接口
接口原型
- (id<Gamepad> _Nonnull)getGamepad;
返回值
类型 | 描述 |
id<Gamepad> | 云游戏手柄接口。 |
调用示例
id<Gamepad> gamepad = [session getGamepad];[gamepad onGamepadKey:4096 down:YES]; // 模拟按下游戏手柄的A键[gamepad onGamepadKey:4096 down:NO]; // 模拟松开游戏手柄的A键
获取触摸屏接口
接口原型
- (id<TouchScreen> _Nonnull)getTouchScreen;
返回值
类型 | 描述 |
id<TouchScreen> | 云触摸屏接口。 |
调用示例
id<TouchScreen> touchscreen = [session getTouchScreen];[touchscreen touchWithX:@(100) y:@(200) eventType:0 fingerID:1 width:1920 height:1080 timestamp:1669253200];
获取运动传感器接口
接口原型
- (id<MotionSensor> _Nonnull)getMotionSensor;
返回值
类型 | 描述 |
id<MotionSensor> | 云运动传感器接口。 |
调用示例
id<MotionSensor> motionSensor = [session getMotionSensor];[motionSensor onSensorData:ACCELEROMETER x:0.0 y:0.0 z:0.0];
发送按键消息
接口原型
- (void)sendKeycodeMessage:(NSDictionary *_Nonnull)msg;
输入参数
参数名称 | 必选 | 类型 | 描述 |
msg | 是 | NSDictionary* | 要发送的按键消息。 |
返回值
无
调用示例
NSDictionary *msg = @{@"keycode": @(65), @"down": @YES}; // 模拟按下键盘的A键[session sendKeycodeMessage:msg];
设置音频会话代理
接口原型
+ (void)setAudioSessionDelegate:(id<TCRAudioSessionDelegate>_Nonnull)delegate;
输入参数
参数名称 | 必选 | 类型 | 描述 |
delegate | 是 | id<TCRAudioSessionDelegate> | 音频会话代理。 |
返回值
无
调用示例
[session setAudioSessionDelegate:delegate];
触发云触屏触摸事件
接口原型
- (void)touchWithX:(NSNumber *)xy:(NSNumber *)yeventType:(int)eventTypefingerID:(int)fingerIDwidth:(int)widthheight:(int)heighttimestamp:(long)timestamp;
输入参数
参数名称 | 必选 | 类型 | 描述 |
x | 是 | NSNumber* | 触摸点在视频流坐标系中的 X 坐标值。 |
y | 是 | NSNumber* | 触摸点在视频流坐标系中的 Y 坐标值。 |
eventType | 是 | int | 事件类型,0为按下,1为移动,2为抬起。 |
fingerID | 是 | int | 与特定指针数据索引关联的指针标识符。 |
width | 是 | int | 视频流的宽度。 |
height | 是 | int | 视频流的高度。 |
timestamp | 是 | long | 事件发生的时间戳。 |
调用示例
[myTouchScreen touchWithX:@(100) y:@(200) eventType:0 fingerID:1 width:1920 height:1080 timestamp:1669253200];
传感器数据变化事件
接口原型
- (void)onSensorData:(SensorType)key x:(double)x y:(double)y z:(double)z;
输入参数
参数名称 | 必选 | 类型 | 描述 |
key | 是 | SensorType | 传感器类型。 |
x | 是 | double | X 轴坐标值。 |
y | 是 | double | Y 轴坐标值。 |
z | 是 | double | Z 轴坐标值。 |
调用示例
[myMotionSensor onSensorData:ACCELEROMETER x:0.0 y:0.0 z:0.0];
位置变化事件
接口原型
- (void)onLocationChanged:(double)longitude latitude:(double)latitude;
输入参数
参数名称 | 必选 | 类型 | 描述 |
longitude | 是 | double | 经度值。 |
latitude | 是 | double | 纬度值。 |
调用示例
[myMotionSensor onLocationChanged:116.39153 latitude:39.90742];
模拟传感器事件
接口原型
- (void)onSimulateSensorEvent:(SensorType)type;
输入参数
参数名称 | 必选 | 类型 | 描述 |
type | 是 | SensorType | 事件类型。 |
调用示例
[myMotionSensor onSimulateSensorEvent:GYRO];
云鼠标点击事件
接口原型
- (void)onMouseKey:(TCRMouseKeyType)key isDown:(BOOL)down;
输入参数
参数名称 | 必选 | 类型 | 描述 |
key | 是 | TCRMouseKeyType | 鼠标按键类型。 |
down | 是 | BOOL | 是否按下。 |
调用示例
[myMouse onMouseKey:LEFT isDown:YES];
云鼠标滚轮滚动事件
接口原型
- (void)onMouseScroll:(float)delta;
输入参数
参数名称 | 必选 | 类型 | 描述 |
delta | 是 | float | 滚轮滚动的偏移量。 |
调用示例
[myMouse onMouseScroll:-1.0];
云鼠标相对移动事件
接口原型
- (void)onMouseDeltaMove:(int)deltaX deltaY:(int)deltaY;
输入参数
参数名称 | 必选 | 类型 | 描述 |
deltaX | 是 | int | 水平轴的偏移量。 |
deltaY | 是 | int | 垂直轴的偏移量。 |
调用示例
[myMouse onMouseDeltaMove:10 deltaY:-5];
云鼠标移动事件
接口原型
- (void)onMouseMoveTo:(int)x y:(int)y;
输入参数
参数名称 | 必选 | 类型 | 描述 |
x | 是 | int | 远程设备上的 X 坐标。 |
y | 是 | int | 远程设备上的 Y 坐标。 |
调用示例
[myMouse onMouseMoveTo:100 y:200];
云键盘按键事件
接口原型
- (void)onKeyboard:(NSInteger)keycode down:(BOOL)down;
输入参数
参数名称 | 必选 | 类型 | 描述 |
keycode | 是 | NSInteger | 键码。 |
down | 是 | BOOL | 是否按下。 |
调用示例
[myKeyboard onKeyboard:65 down:YES]; // A键按下
区分左右键的云键盘按键事件
接口原型
- (void)onKeyboard:(NSInteger)keycode down:(BOOL)down isLeft:(BOOL)isLeft;
输入参数
参数名称 | 必选 | 类型 | 描述 |
keycode | 是 | NSInteger | 键码。 |
down | 是 | BOOL | 是否按下。 |
isLeft | 是 | BOOL | 是否为左键。 |
调用示例
[myKeyboard onKeyboard:16 down:YES isLeft:YES]; // 左侧shift键按下[myKeyboard onKeyboard:16 down:NO isLeft:YES]; // 左侧shift键抬起
查询云虚拟键盘的大小写锁定状态
接口原型
- (void)checkKeyboardCapsLock:(void (^)(int retCode))finishBlk;
输入参数
参数名称 | 必选 | 类型 | 描述 |
finishBlk | 是 | void (^)(int retCode) | 回调块,用于返回大小写锁定状态。 |
调用示例
[myKeyboard checkKeyboardCapsLock:^(int retCode) {NSLog(@"Caps Lock status: %d", retCode);}];
重置云虚拟键盘的大小写锁定状态
接口原型
- (void)resetKeyboardCapsLock;
调用示例
[myKeyboard resetKeyboardCapsLock];
重置云键盘按键状态
接口原型
- (void)resetKeyboard;
调用示例
[myKeyboard resetKeyboard];
连接虚拟游戏手柄
接口原型
- (void)connectGamepad;
调用示例
[myGamepad connectGamepad];
断开虚拟游戏手柄
接口原型
- (void)disconnectGamepad;
调用示例
[myGamepad disconnectGamepad];
云游戏手柄按键事件
接口原型
- (void)onGamepadKey:(NSInteger)keycode down:(BOOL)down;
输入参数
参数名称 | 必选 | 类型 | 描述 |
keycode | 是 | NSInteger | 键码。 |
down | 是 | BOOL | 是否按下。 |
调用示例
[myGamepad onGamepadKey:0x41 down:YES]; // A键按下
云游戏手柄摇杆事件
接口原型
- (void)onGamepadStick:(KeyType)type x:(NSInteger)x y:(NSInteger)y;
输入参数
参数名称 | 必选 | 类型 | 描述 |
type | 是 | KeyType | 摇杆类型。 |
x | 是 | NSInteger | 摇杆 X 坐标。 |
y | 是 | NSInteger | 摇杆 Y 坐标。 |
调用示例
[myGamepad onGamepadStick:LS x:10 y:-20]; // 左摇杆向左下移动
云游戏手柄触发器事件
接口原型
- (void)onGamepadTrigger:(KeyType)type value:(NSInteger)value down:(BOOL)down;
输入参数
参数名称 | 必选 | 类型 | 描述 |
type | 是 | KeyType | 触发器类型。 |
value | 是 | NSInteger | 触发器的绝对位置。 |
down | 是 | BOOL | 是否按下。 |
调用示例
[myGamepad onGamepadTrigger:LT value:128 down:YES]; // LT触发器半压
音频会话代理
接口原型
- (BOOL)onSetCategory:(NSString *_Nonnull)category withOptions:(AVAudioSessionCategoryOptions)options error:(NSError *_Nullable *_Nullable)outError;- (BOOL)onSetMode:(NSString *_Nonnull)mode error:(NSError *_Nullable *_Nullable)outError;- (BOOL)onSetActive:(BOOL)active error:(NSError *_Nullable *_Nullable)outError;
输入参数
参数名称 | 必选 | 类型 | 描述 |
category | 是 | NSString* | 音频会话类别。 |
mode | 是 | NSString* | 音频会话模式。 |
active | 是 | BOOL | 音频会话活动状态。 |
outError | 否 | NSError** | 输出错误信息。 |
返回值
类型 | 描述 |
BOOL | 是否成功设置。 |
调用示例
[TCRSession setAudioSessionDelegate:delegate];
解码后的视频帧数据回调
接口原型
- (void)onRenderVideoFrame:(TCRVideoFrame *)frame;
输入参数
参数名称 | 必选 | 类型 | 描述 |
frame | 是 | TCRVideoFrame* | 视频帧对象。 |
调用示例
- (void)onRenderVideoFrame:(TCRVideoFrame *)frame {// 在这里处理解码后的视频帧数据NSLog(@"Rendering video frame with dimensions %dx%d", frame.width, frame.height);}
音频数据回调
接口原型
- (void)onAudioData:(TCRAudioFrame *)data;
输入参数
参数名称 | 必选 | 类型 | 描述 |
data | 是 | TCRAudioFrame* | 音频帧对象。 |
调用示例
- (void)onAudioData:(TCRAudioFrame *)data {// 在这里处理音频数据NSLog(@"Received audio data with %d samples, %d channels, and %d bits per sample", data.frames, data.channels, data.bitsPerSample);}
数据结构概览
数据结构 | 描述 |
表示视频帧的数据结构。 | |
表示音频帧的数据结构。 | |
表示单个设备操作的响应结果。 | |
表示批量操作的响应结果。 | |
包含设备的品牌和型号信息。 | |
表示设备的地理位置。 | |
表示设备的语言设置。 | |
表示设备的地区设置。 | |
表示设备的网络代理配置。 | |
表示设备的 SIM 卡状态和识别信息。 | |
表示设备自定义属性。 | |
单台设备的属性查询结果。 | |
表示设备的应用程序信息。 | |
单台设备的第三方应用查询结果。 | |
单台设备的所有应用程序查询结果。 | |
单台设备的前台保持状态。 | |
单台设备的摄像头媒体播放状态。 | |
单台设备的后台保活应用列表。 | |
单台设备的媒体搜索结果。 | |
单台设备的应用安装黑名单。 | |
单台设备的导航栏显示状态。 | |
单台设备的系统媒体音量大小。 | |
表示上传文件的数据结构。 | |
表示上传媒体文件的数据结构。 | |
多台设备的属性查询结果。 | |
多台设备的第三方应用查询结果。 | |
多台设备的摄像头媒体播放状态。 | |
多台设备的前台保持状态。 | |
多台设备的后台保活应用列表。 | |
多台设备的所有应用程序查询结果。 | |
多台设备的应用安装黑名单。 | |
多台设备的导航栏显示状态。 | |
多台设备的系统媒体音量大小。 | |
批量任务基础回调类型。 | |
上传文件回调类型。 | |
上传媒体文件回调类型。 | |
属性查询回调类型。 | |
用户应用查询回调类型。 | |
摄像头媒体状态回调类型。 | |
应用前台状态回调类型。 | |
保活列表查询回调类型。 | |
媒体搜索回调类型。 | |
所有应用查询回调类型。 | |
应用黑名单查询回调类型。 | |
获取当前系统导航栏显示状态回调类型。 | |
获取当前系统媒体音量大小回调类型。 |
视频帧数据结构
TCRVideoFrame
@interface TCRVideoFrame : NSObject@property (nonatomic, assign) int width;@property (nonatomic, assign) int height;@property (nonatomic, assign) int rotation;@property (nonatomic, assign) int64_t timeStampNs;@property (nonatomic, assign) CVPixelBufferRef pixelBuffer;@end
变量
变量名称 | 类型 | 描述 |
width | int | 视频帧的宽度。 |
height | int | 视频帧的高度。 |
rotation | int | 视频帧的旋转角度。 |
timeStampNs | int64_t | 视频帧的时间戳,单位为纳秒。 |
pixelBuffer | CVPixelBufferRef | 视频帧的像素缓冲区。 |
音频帧数据结构
TCRAudioFrame
@interface TCRAudioFrame : NSObject@property (nonatomic, copy) NSData *data;@property (nonatomic, assign) int bitsPerSample;@property (nonatomic, assign) int sampleRate;@property (nonatomic, assign) int channels;@property (nonatomic, assign) int frames;@end
变量
变量名称 | 类型 | 描述 |
data | NSData * | 音频帧的数据。 |
bitsPerSample | int | 每个音频样本的位数。 |
sampleRate | int | 音频的采样率。 |
channels | int | 音频数据中的通道数量。 |
frames | int | 音频数据中的样本帧数。 |
单设备操作响应结果
CaiDeviceResponse
@interface CaiDeviceResponse : NSObject@property (nonatomic, assign) NSInteger code;@property (nonatomic, copy, nullable) NSString *msg;@end
变量
变量名称 | 类型 | 描述 |
code | NSInteger | 单个设备操作状态码。 |
msg | NSString * | 单个设备状态消息。 |
批量操作响应结果
CaiBatchTaskResponse
@interface CaiBatchTaskResponse<__covariant DeviceResponseType: CaiDeviceResponse *> : NSObject@property (nonatomic, assign) NSInteger code;@property (nonatomic, copy, nullable) NSString *message;@property (nonatomic, strong, nullable) NSDictionary<NSString *, DeviceResponseType> *deviceResponses;@end
变量
变量名称 | 类型 | 描述 |
code | NSInteger | 整体操作状态码。 |
message | NSString * | 整体状态消息。 |
deviceResponses | NSDictionary<NSString *, DeviceResponseType> * | 各设备响应字典。 |
设备品牌和型号信息
CaiDeviceInfo
@interface CaiDeviceInfo : NSObject@property (nonatomic, copy, nullable) NSString *brand;@property (nonatomic, copy, nullable) NSString *model;@end
变量
变量名称 | 类型 | 描述 |
brand | NSString * | 设备品牌。 |
model | NSString * | 设备型号。 |
设备地理位置
CaiGPSInfo
@interface CaiGPSInfo : NSObject@property (nonatomic, assign) double longitude;@property (nonatomic, assign) double latitude;@end
变量
变量名称 | 类型 | 描述 |
longitude | double | 经度值。 |
latitude | double | 纬度值。 |
设备语言设置
CaiLanguageInfo
@interface CaiLanguageInfo : NSObject@property (nonatomic, copy, nullable) NSString *language;@property (nonatomic, copy, nullable) NSString *country;@end
变量
变量名称 | 类型 | 描述 |
language | NSString * | 语言代码。 |
country | NSString * | 国家/地区代码。 |
设备地区设置
CaiLocaleInfo
@interface CaiLocaleInfo : NSObject@property (nonatomic, copy, nullable) NSString *timezone;@end
变量
变量名称 | 类型 | 描述 |
timezone | NSString * | 时区设置。 |
设备网络代理配置
CaiProxyInfo
@interface CaiProxyInfo : NSObject@property (nonatomic, assign) BOOL enabled;@property (nonatomic, copy, nullable) NSString *protocol;@property (nonatomic, copy, nullable) NSString *host;@property (nonatomic, assign) NSInteger port;@property (nonatomic, copy, nullable) NSString *user;@property (nonatomic, copy, nullable) NSString *password;@end
变量
变量名称 | 类型 | 描述 |
enabled | BOOL | 是否启用代理。 |
protocol | NSString * | 代理协议。 |
host | NSString * | 代理服务器主机地址。 |
port | NSInteger | 代理服务器端口。 |
user | NSString * | 代理认证用户名。 |
password | NSString * | 代理认证密码。 |
设备 SIM 卡状态和识别信息
CaiSIMInfo
@interface CaiSIMInfo : NSObject@property (nonatomic, assign) NSInteger state;@property (nonatomic, copy, nullable) NSString *phoneNumber;@property (nonatomic, copy, nullable) NSString *IMSI;@property (nonatomic, copy, nullable) NSString *ICCID;@end
变量
变量名称 | 类型 | 描述 |
state | NSInteger | SIM 卡状态,0为未激活,1为已激活。 |
phoneNumber | NSString * | 手机号码。 |
IMSI | NSString * | 国际移动用户识别码。 |
ICCID | NSString * | 集成电路卡识别码。 |
设备自定义属性
CaiExtraProperty
@interface CaiExtraProperty : NSObject@property (nonatomic, copy, nullable) NSString *key;@property (nonatomic, copy, nullable) NSString *value;@end
变量
变量名称 | 类型 | 描述 |
key | NSString * | 属性键名。 |
value | NSString * | 属性值。 |
单台设备的属性查询结果
CaiInstancePropertiesResponseItem
@interface CaiInstancePropertiesResponseItem : CaiDeviceResponse@property (nonatomic, copy, nullable) NSString *requestId;@property (nonatomic, strong, nullable) CaiDeviceInfo *deviceInfo;@property (nonatomic, strong, nullable) CaiGPSInfo *GPSInfo;@property (nonatomic, strong, nullable) CaiLanguageInfo *languageInfo;@property (nonatomic, strong, nullable) CaiLocaleInfo *localeInfo;@property (nonatomic, strong, nullable) CaiProxyInfo *proxyInfo;@property (nonatomic, strong, nullable) CaiSIMInfo *SIMInfo;@end
变量
变量名称 | 类型 | 描述 |
requestId | NSString * | 请求 ID。 |
deviceInfo | CaiDeviceInfo * | 设备信息。 |
GPSInfo | CaiGPSInfo * | GPS 信息。 |
languageInfo | CaiLanguageInfo * | 语言信息。 |
localeInfo | CaiLocaleInfo * | 地区信息。 |
proxyInfo | CaiProxyInfo * | 代理信息。 |
SIMInfo | CaiSIMInfo * | SIM 卡信息。 |
设备的应用程序信息
CaiApp
@interface CaiApp : NSObject@property (nonatomic, assign) long long firstInstallTimeMs;@property (nonatomic, copy, nullable) NSString *label;@property (nonatomic, assign) long long lastUpdateTimeMs;@property (nonatomic, copy, nullable) NSString *packageName;@property (nonatomic, copy, nullable) NSString *versionName;@end
变量
变量名称 | 类型 | 描述 |
firstInstallTimeMs | long long | 首次安装时间,Unix 时间戳 (毫秒)。 |
label | NSString * | 应用显示名称。 |
lastUpdateTimeMs | long long | 最后更新时间,Unix 时间戳 (毫秒)。 |
packageName | NSString * | 应用包名。 |
versionName | NSString * | 应用版本名称。 |
单台设备的第三方应用查询结果
CaiListUserAppsResponseItem
@interface CaiListUserAppsResponseItem : CaiDeviceResponse@property (nonatomic, strong, nullable) NSArray<CaiApp *> *appList;@end
变量
变量名称 | 类型 | 描述 |
appList | NSArray<CaiApp *> * | 应用列表,设备上安装的第三方应用程序列表。 |
单台设备的所有应用程序查询结果
CaiListAllAppsResponseItem
@interface CaiListAllAppsResponseItem : CaiDeviceResponse@property (nonatomic, strong, nullable) NSArray<CaiApp *> *appList;@end
变量
变量名称 | 类型 | 描述 |
appList | NSArray<CaiApp *> * | 所有应用列表,包括系统应用和第三方应用。 |
单台设备的前台保持状态
CaiDescribeKeepFrontAppStatusResponseItem
@interface CaiDescribeKeepFrontAppStatusResponseItem : CaiDeviceResponse@property (nonatomic, strong, nullable) NSString *packageName;@property (nonatomic, assign) BOOL enable;@property (nonatomic, assign) int restartIntervalSeconds;@end
变量
变量名称 | 类型 | 描述 |
packageName | NSString * | 应用包名。 |
enable | BOOL | 应用前台保持。 |
restartIntervalSeconds | int | 重启间隔时长。 |
单台设备的摄像头媒体播放状态
CaiDescribeCameraMediaPlayStatusResponseItem
@interface CaiDescribeCameraMediaPlayStatusResponseItem : CaiDeviceResponse@property (nonatomic, copy, nullable) NSString *filePath;@property (nonatomic, assign) NSInteger loops;@end
变量
变量名称 | 类型 | 描述 |
filePath | NSString * | 媒体文件路径。 |
loops | NSInteger | 循环次数,负数表示无限循环。 |
单台设备的后台保活应用列表
CaiDescribeKeepAliveListResponseItem
@interface CaiDescribeKeepAliveListResponseItem : CaiDeviceResponse@property (nonatomic, strong, nullable) NSArray<NSString *> *appList;@end
变量
变量名称 | 类型 | 描述 |
appList | NSArray<NSString *> * | 保活应用列表,应用包名的数组。 |
设备的媒体搜索项
CaiMediaItem
@interface CaiMediaItem : NSObject@property (nonatomic, copy, nullable) NSString *fileName;@property (nonatomic, copy, nullable) NSString *filePath;@property (nonatomic, assign) long long fileBytes;@property (nonatomic, assign) long long fileModifiedTime;@end
变量
变量名称 | 类型 | 描述 |
fileName | NSString * | 文件名,包含扩展名。 |
filePath | NSString * | 完整文件路径。 |
fileBytes | long long | 文件大小,以字节为单位。 |
fileModifiedTime | long long | 文件修改时间,Unix 时间戳 (毫秒)。 |
单台设备的媒体搜索结果
CaiMediaSearchResponseItem
@interface CaiMediaSearchResponseItem : CaiDeviceResponse@property (nonatomic, strong, nullable) NSArray<CaiMediaItem *> *mediaList;@end
变量
变量名称 | 类型 | 描述 |
mediaList | NSArray<CaiMediaItem *> * | 媒体文件列表。 |
批量媒体搜索响应结果
CaiMediaSearchResponse
@interface CaiMediaSearchResponse : CaiBatchTaskResponse<CaiMediaSearchResponseItem *>@end
变量
CaiMediaSearchResponse 是一个批量任务响应基类,具体变量在父类 CaiBatchTaskResponse 中定义。
单台设备的应用安装黑名单
CaiDescribeAppInstallBlackListResponseItem
@interface CaiDescribeAppInstallBlackListResponseItem : CaiDeviceResponse@property (nonatomic, strong, nullable) NSArray<NSString *> *appList;@end
变量
变量名称 | 类型 | 描述 |
appList | NSArray<NSString *> * | 黑名单应用列表,禁止安装的应用包名数组。 |
单台设备的导航栏显示状态
CaiGetNavVisibleStatusResponseItem
@interface CaiGetNavVisibleStatusResponseItem : CaiDeviceResponse@property (nonatomic, assign) BOOL visible;@end
变量
变量名称 | 类型 | 描述 |
visible | BOOL | 导航栏是否显示。 |
单台设备的系统媒体音量大小
CaiGetSystemMusicVolumeResponseItem
@interface CaiGetSystemMusicVolumeResponseItem : CaiDeviceResponse@property (nonatomic, assign) NSInteger volume;@end
变量
变量名称 | 类型 | 描述 |
volume | NSInteger | 当前系统媒体音量大小(0-100)。 |
上传文件的数据结构
CaiUploadFileItem
@interface CaiUploadFileItem : NSObject@property (nonatomic, strong, nullable) NSData *fileData;@property (nonatomic, copy, nullable) NSString *fileName;@property (nonatomic, copy, nullable) NSString *filePath; // 可选路径@end
变量
变量名称 | 类型 | 描述 |
fileData | NSData * | 要上传的文件数据。 |
fileName | NSString * | 文件名。 |
filePath | NSString * | 可选的文件路径。 |
上传媒体文件的数据结构
CaiUploadMediaFileItem
@interface CaiUploadMediaFileItem : NSObject@property (nonatomic, strong, nullable) NSData *fileData;@property (nonatomic, copy, nullable) NSString *fileName;@end
变量
变量名称 | 类型 | 描述 |
fileData | NSData * | 要上传的媒体文件数据。 |
fileName | NSString * | 媒体文件名。 |
批量属性查询响应
CaiDescribeInstancePropertiesResponse
@interface CaiDescribeInstancePropertiesResponse : CaiBatchTaskResponse<CaiInstancePropertiesResponseItem *>@end
批量用户应用查询响应
CaiListUserAppsResponse
@interface CaiListUserAppsResponse : CaiBatchTaskResponse<CaiListUserAppsResponseItem *>@end
批量摄像头媒体状态响应
CaiDescribeCameraMediaPlayStatusResponse
@interface CaiDescribeCameraMediaPlayStatusResponse : CaiBatchTaskResponse<CaiDescribeCameraMediaPlayStatusResponseItem *>@end
批量前台保持响应
CaiDescribeKeepFrontAppStatusResponse
@interface CaiDescribeKeepFrontAppStatusResponse : CaiBatchTaskResponse<CaiDescribeKeepFrontAppStatusResponseItem *>@end
批量保活列表响应
CaiDescribeKeepAliveListResponse
@interface CaiDescribeKeepAliveListResponse : CaiBatchTaskResponse<CaiDescribeKeepAliveListResponseItem *>@end
批量所有应用查询响应
CaiListAllAppsResponse
@interface CaiListAllAppsResponse : CaiBatchTaskResponse<CaiListAllAppsResponseItem *>@end
批量应用黑名单响应
CaiDescribeAppInstallBlackListResponse
@interface CaiDescribeAppInstallBlackListResponse : CaiBatchTaskResponse<CaiDescribeAppInstallBlackListResponseItem *>@end
导航栏显示状态响应
CaiGetNavVisibleStatusResponse
@interface CaiGetNavVisibleStatusResponse : CaiBatchTaskResponse<CaiGetNavVisibleStatusResponseItem *>@end
系统媒体音量响应
CaiGetSystemMusicVolumeResponse
@interface CaiGetSystemMusicVolumeResponse : CaiBatchTaskResponse<CaiGetSystemMusicVolumeResponseItem *>@end
上传文件响应
CaiUploadResponse
@interface CaiUploadResponse : NSObject@property (nonatomic, assign) NSInteger code;@property (nonatomic, copy, nullable) NSString *msg;@property (nonatomic, strong, nullable) NSArray<NSDictionary *> *fileStatus;@end
变量
变量名称 | 类型 | 描述 |
code | NSInteger | 响应码。 |
msg | NSString * | 响应消息。 |
fileStatus | NSArray<NSDictionary *> * | 文件状态。 |
上传媒体文件响应
CaiUploadMediaFilesResponse
@interface CaiUploadMediaFilesResponse : NSObject@property (nonatomic, assign) NSInteger code;@property (nonatomic, copy, nullable) NSString *msg;@end
变量
变量名称 | 类型 | 描述 |
code | NSInteger | 响应码。 |
msg | NSString * | 响应消息。 |
批量任务基础回调类型
CaiBatchTaskCompletion
typedef void (^CaiBatchTaskCompletion)(CaiBatchTaskResponse *_Nonnull response, NSError * _Nullable error);
变量
变量名称 | 类型 | 描述 |
response | CaiBatchTaskResponse * | 批量任务响应结构。 |
error | NSError * | 错误对象(系统级错误)。 |
上传文件回调类型
CaiUploadFilesCompletion
typedef void (^CaiUploadFilesCompletion)(CaiUploadResponse *_Nonnull response, NSError *_Nullable error);
变量
变量名称 | 类型 | 描述 |
response | CaiUploadResponse * | 上传文件响应。 |
error | NSError * | 错误对象(系统级错误)。 |
上传媒体文件回调类型
CaiUploadMediaFilesCompletion
typedef void (^CaiUploadMediaFilesCompletion)(CaiUploadMediaFilesResponse *_Nonnull response, NSError *_Nullable error);
变量
变量名称 | 类型 | 描述 |
response | CaiUploadMediaFilesResponse * | 上传媒体文件响应。 |
error | NSError * | 错误对象(系统级错误)。 |
属性查询回调类型
CaiDescribeInstancePropertiesCompletion
typedef void (^CaiDescribeInstancePropertiesCompletion)(CaiDescribeInstancePropertiesResponse *_Nonnull response, NSError *_Nullable error);
变量
变量名称 | 类型 | 描述 |
response | CaiDescribeInstancePropertiesResponse * | 属性查询响应。 |
error | NSError * | 错误对象(系统级错误)。 |
用户应用查询回调类型
CaiListUserAppsCompletion
typedef void (^CaiListUserAppsCompletion)(CaiListUserAppsResponse *_Nonnull response, NSError *_Nullable error);
变量
变量名称 | 类型 | 描述 |
response | CaiListUserAppsResponse * | 用户应用查询响应。 |
error | NSError * | 错误对象(系统级错误)。 |
摄像头媒体状态回调类型
CaiDescribeCameraMediaPlayStatusCompletion
typedef void (^CaiDescribeCameraMediaPlayStatusCompletion)(CaiDescribeCameraMediaPlayStatusResponse *_Nonnull response, NSError *_Nullable error);
变量
变量名称 | 类型 | 描述 |
response | CaiDescribeCameraMediaPlayStatusResponse * | 摄像头媒体状态响应。 |
error | NSError * | 错误对象(系统级错误)。 |
应用前台状态回调类型
CaiDescribeKeepFrontAppStatusCompletion
typedef void (^CaiDescribeKeepFrontAppStatusCompletion)(CaiDescribeKeepFrontAppStatusResponse *_Nonnull response, NSError *_Nullable error);
变量
变量名称 | 类型 | 描述 |
response | CaiDescribeKeepFrontAppStatusResponse * | 应用前台状态响应。 |
error | NSError * | 错误对象(系统级错误)。 |
保活列表查询回调类型
CaiDescribeKeepAliveListCompletion
typedef void (^CaiDescribeKeepAliveListCompletion)(CaiDescribeKeepAliveListResponse *_Nonnull response, NSError *_Nullable error);
变量
变量名称 | 类型 | 描述 |
response | CaiDescribeKeepAliveListResponse * | 保活列表响应。 |
error | NSError * | 错误对象(系统级错误)。 |
媒体搜索回调类型
CaiMediaSearchCompletion
typedef void (^CaiMediaSearchCompletion)(CaiMediaSearchResponse *_Nonnull response, NSError *_Nullable error);
变量
变量名称 | 类型 | 描述 |
response | CaiMediaSearchResponse * | 媒体搜索响应。 |
error | NSError * | 错误对象(系统级错误)。 |
所有应用查询回调类型
CaiListAllAppsCompletion
typedef void (^CaiListAllAppsCompletion)(CaiListAllAppsResponse *_Nonnull response, NSError *_Nullable error);
变量
变量名称 | 类型 | 描述 |
response | CaiListAllAppsResponse * | 所有应用查询响应。 |
error | NSError * | 错误对象(系统级错误)。 |
应用黑名单查询回调类型
CaiDescribeAppInstallBlackListCompletion
typedef void (^CaiDescribeAppInstallBlackListCompletion)(CaiDescribeAppInstallBlackListResponse *_Nonnull response, NSError *_Nullable error);
变量
变量名称 | 类型 | 描述 |
response | CaiDescribeAppInstallBlackListResponse * | 应用黑名单响应。 |
error | NSError * | 错误对象(系统级错误)。 |
当前系统导航栏显示状态回调类型
CaiGetNavVisibleStatusCompletion
typedef void (^CaiGetNavVisibleStatusCompletion)(CaiGetNavVisibleStatusResponse *_Nonnull response, NSError *_Nullable error);
变量
变量名称 | 类型 | 描述 |
response | CaiGetNavVisibleStatusResponse * | 获取当前系统导航栏显示状态响应。 |
error | NSError * | 错误对象(系统级错误)。 |
当前系统媒体音量大小回调类型
CaiGetSystemMusicVolumeCompletion
typedef void (^CaiGetSystemMusicVolumeCompletion)(CaiGetSystemMusicVolumeResponse *_Nonnull response, NSError *_Nullable error);
变量
变量名称 | 类型 | 描述 |
response | CaiGetSystemMusicVolumeResponse * | 获取当前系统媒体音量大小响应。 |
error | NSError * | 错误对象(系统级错误) |