目录

CollaborationCamera (跨设备互通组件)

该模块提供了组件createCollaborationCameraMenuItems和CollaborationCameraStateDialog,两者需要配合使用,完成分布式跨端能力,如在PC/2in1端跨端调用Phone端拍照。

通过createCollaborationCameraMenuItems组件,可以获取组网内具有对应能力的设备列表。用户选择对应的设备后,拉起应用。调用CollaborationCameraStateDialog,应用将弹出提示框,提示对端应用状态。

废弃说明: 从5.0.0(12)开始废弃,建议使用CollaborationService替代。

起始版本: 4.0.0(10)

导入模块

import { CollaborationCameraStateDialog, createCollaborationCameraMenuItems, CollaborationCameraBusinessFilter} from '@kit.ServiceCollaborationKit';

createCollaborationCameraMenuItems(deprecated)

createCollaborationCameraMenuItems(businessFilter?: Array<CollaborationCameraBusinessFilter>): void

设备列表选择器,需要在Menu组件内调用。用于显示组网内具有对应能力的设备列表。

该方法为自定义构建函数,开发者在使用前需要先了解@Builder。

废弃说明: 从5.0.0(12) 开始废弃,建议使用createCollaborationServiceMenuItems替代。

模型约束: 此模块的接口仅可在Stage模型下使用。

装饰器类型: @Builder

系统能力: SystemCapability.Collaboration.Camera

设备行为差异: 该接口在PC/2in1、Tablet可正常调用,在其他设备类型上无法展示设备列表,无法使用跨设备互通能力。

起始版本: 4.0.0(10)

参数:

参数名 类型 必填 说明
businessFilter Array<CollaborationCameraBusinessFilter> 否

传入能力类型,支持匹配跨端拍照、扫描、图库。

默认值为ALL,匹配所有业务。

示例:

@Builder
myTestMenu() {
  Menu() {
    createCollaborationCameraMenuItems([CollaborationCameraBusinessFilter.ALL]);
  }
}

CollaborationCameraBusinessFilter(deprecated)

能力类型枚举值。

废弃说明: 从5.0.0(12) 开始废弃,建议使用CollaborationServiceFilter替代。

模型约束: 此模块的接口仅可在Stage模型下使用。

系统能力: SystemCapability.Collaboration.Camera

设备行为差异: 该接口在PC/2in1、Tablet可正常调用,在其他设备类型上无法展示设备列表,无法使用跨设备互通能力。

起始版本: 4.0.0(10)

名称 值 说明
ALL 0 匹配所有业务。
TAKE_PHOTO 1 匹配跨端拍照。
SCAN_DOCUMENT 2

匹配文档扫描。

起始版本: 4.1.0(11)

IMAGE_PICKER 3

匹配图库选择器。

起始版本: 4.1.0(11)

示例:

@Builder
myTestMenu() {
  Menu() {
    createCollaborationCameraMenuItems([CollaborationCameraBusinessFilter.ALL]);
  }
}

CollaborationCameraStateDialog(deprecated)

弹窗组件,用于提示对端应用状态。

您需要实现onState方法,并且在页面中定义这个组件,在业务开始后,此方法将被协同框架调用。

该组件为自定义组件,开发者在使用前需要先了解@Component。

废弃说明: 从5.0.0(12) 开始废弃,建议使用CollaborationServiceStateDialog替代。

模型约束: 此模块的接口仅可在Stage模型下使用。

装饰器类型: @Component

系统能力: SystemCapability.Collaboration.Camera

设备行为差异: 该接口在PC/2in1、Tablet可正常调用,在其他设备类型上无法展示设备列表,无法使用跨设备互通能力。

起始版本: 4.0.0(10)

[h2]onState(deprecated)

onState: (stateCode: number, buffer: ArrayBuffer) => void

接收数据的回调函数,其中传入的stateCode是完成状态,buffer是回传的图片数据,开发者可通过状态和图片数据结合自身的业务逻辑实现onState方法。

废弃说明: 从5.0.0(12) 开始废弃,建议使用onState替代。

模型约束: 此模块的接口仅可在Stage模型下使用。

系统能力: SystemCapability.Collaboration.Camera

设备行为差异: 该接口在PC/2in1、Tablet可正常调用,在其他设备类型上无法展示设备列表,无法使用跨设备互通能力。

起始版本: 4.0.0(10)

参数:

参数名 类型 必填 说明
stateCode number 是 标识业务完成状态,含义详见下面错误码。
buffer ArrayBuffer 是 成功则返回对应数据,失败则返回空。

错误码:

以下错误码的详细介绍请参见错误码。

错误码ID 错误信息
0 Success.
1001202001 The peer end cancels the operation.
1001202002 An error occurred within the collaborative framework.
1001202003 The local end cancels the operation.
1001202004 The device interconnectivity has been established.
1001202005 All images have been successfully sent back.
1001202006 Multiple images are being sent back.

[h2]build(deprecated)

build(): void

struct的默认构造函数,开发者无法直接调用此方法。

废弃说明: 从5.0.0(12) 开始废弃,建议使用build替代。

模型约束: 此模块的接口仅可在Stage模型下使用。

系统能力: SystemCapability.Collaboration.Camera

设备行为差异: 该接口在PC/2in1、Tablet可被组件正常调用,在其他设备类型上无法展示设备列表,无法使用跨设备互通能力。

起始版本: 4.0.0(10)

示例:

参考以下示例,可以完成一次调用对端应用的操作。

跨设备互通详细介绍可参考跨设备互通特性简介。

import {
  createCollaborationCameraMenuItems,
  CollaborationCameraStateDialog,
  CollaborationCameraBusinessFilter
} from '@kit.ServiceCollaborationKit';
import { image } from '@kit.ImageKit';
import { hilog } from '@kit.PerformanceAnalysisKit';

@Entry
@Component
struct Index {
  @State picture: PixelMap | undefined = undefined;

  @Builder
  myTestMenu() {
    Menu() {
      createCollaborationCameraMenuItems([CollaborationCameraBusinessFilter.ALL]);
    }
  }

  build() {
    Column({ space: 20 }) {
      CollaborationCameraStateDialog({
        onState: (stateCode: number, buffer: ArrayBuffer): void => this.doInsertPicture(stateCode, buffer)
      })
      Button('使用远端设备插入图片')
        .type(ButtonType.Normal)
        .borderRadius(10)
        .bindMenu(this.myTestMenu)

      if (this.picture) {
        Image(this.picture)
          .borderStyle(BorderStyle.Dotted)
          .borderWidth(1)
          .objectFit(ImageFit.Contain)
          .height('80%')
          .onComplete((event) => {
            if (event != undefined) {
              hilog.info(0, 'MEMOMOCK', 'onComplete ' + event.loadingStatus);
            }
          })
      }
    }
    .padding(20)
    .width('100%')
    .alignItems(HorizontalAlign.Center)
  }

  doInsertPicture(stateCode: number, buffer: ArrayBuffer): void {
    if (stateCode != 0) {
      return;
    }
    let imageSource = image.createImageSource(buffer);
    imageSource.createPixelMap().then((pixelMap) => {
      this.picture = pixelMap;
    }).catch((error: Error) => {
      hilog.error(0, 'MEMOMOCK', 'Create pixel map failed: ' + error);
    }).finally(() => {
      imageSource.release();
    });
  }
}