# Class (AVCastPickerHelper) > **说明:** > > - 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 > - 本Class首批接口从API version 14开始支持。 投播半模态对象,可拉起半模态窗口,选择投播设备。在使用前,需要创建AVCastPickerHelper实例。 ## 导入模块 ```ts import { avSession } from '@kit.AVSessionKit'; ``` ## constructor14+ constructor(context: Context) 创建AVCastPickerHelper对象,获取context参考[getHostContext](../apis-arkui/arkts-apis-uicontext-uicontext.md#gethostcontext12)。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.AVSession.AVCast **参数:** | 参数名 | 类型 | 必填 | 说明 | | --------- | ----------------------------------------------------------- | ---- | ------------------------------------------------------------ | | context | Context | 是 | 应用上下文(仅支持[UIAbilityContext](../apis-ability-kit/js-apis-inner-application-uiAbilityContext.md))。 | **错误码:** 以下错误码的详细介绍请参见[媒体会话管理错误码](errorcode-avsession.md)。 | 错误码ID | 错误信息 | | -------- | ---------------------------------------- | | 401 | parameter check failed. 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. | | 6600101 | Session service exception. | **示例:** ```ts import { common } from '@kit.AbilityKit'; import { avSession } from '@kit.AVSessionKit'; @Entry @Component struct Index { @State message: string = 'hello world'; build() { Row() { Column() { Text(this.message) .fontSize(40) .fontWeight(FontWeight.Bold) .onClick(()=>{ let context = this.getUIContext().getHostContext() as Context; let avCastPicker = new avSession.AVCastPickerHelper(context); }) } .width('100%') } .height('100%') } } ``` ## select14+ select(options?: AVCastPickerOptions): Promise\ 通过选择模式拉起AVCastPicker界面,用户可以选择投播设备。接口采用Promise异步返回形式,传入可选参数AVCastPickerOptions对象,无返回值。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.AVSession.AVCast **参数:** | 参数名 | 类型 | 必填 | 说明 | | --------- | ----------------------------------------------------------- | ---- | ------------------------------------------------------------ | | options | [AVCastPickerOptions](arkts-apis-avsession-i.md#avcastpickeroptions14) | 否 | AVCastPicker选择选项。无此参数时,以AVCastPickerOptions默认值拉起。 | **返回值:** | 类型 | 说明 | | -------------- | ----------------------------- | | Promise\ | Promise对象。当命令发送成功,无返回结果,否则返回错误对象。 | **错误码:** 以下错误码的详细介绍请参见[媒体会话管理错误码](errorcode-avsession.md)。 | 错误码ID | 错误信息 | | -------- | ---------------------------------------- | | 401 | parameter check failed. 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. | **示例:** ```ts import { common } from '@kit.AbilityKit'; import { BusinessError } from '@kit.BasicServicesKit'; import { avSession } from '@kit.AVSessionKit'; async function avCastPicker(context: common.Context) { let avCastPickerOptions : avSession.AVCastPickerOptions = { sessionType : 'video', } let avCastPicker = new avSession.AVCastPickerHelper(context); avCastPicker.select(avCastPickerOptions).then(() => { console.info('select successfully'); }).catch((err: BusinessError) => { console.error(`AVCastPicker.select failed with err: ${err.code}, ${err.message}`); }); } ``` ## on('pickerStateChange')14+ on(type: 'pickerStateChange', callback: Callback) : void 设置半模态窗口变化的监听事件。 每个指令支持注册多个回调,如果需要只执行最新监听,需要先注销旧的监听,否则新旧监听都会触发回调。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.AVSession.AVCast **参数:** | 参数名 | 类型 | 必填 | 说明 | | --------| -----------|-----|------------| | type | string | 是 | 事件回调类型,支持事件`'pickerStateChange'`:当半模态窗口变化时,触发该事件。 | | callback | Callback\<[AVCastPickerState](js-apis-avCastPickerParam.md#avcastpickerstate11)> | 是 | 回调函数,参数state是变化后的半模态窗口状态。| **错误码:** 以下错误码的详细介绍请参见[媒体会话管理错误码](errorcode-avsession.md)。 | 错误码ID | 错误信息 | | -------- | ---------------------------------------- | | 401 | parameter check failed. 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. | | 6600101 | Session service exception. | **示例:** ```ts import { common } from '@kit.AbilityKit'; import { AVCastPickerState } from '@kit.AVSessionKit'; import { avSession } from '@kit.AVSessionKit'; async function onPickerStateChange(context: common.Context) { let avCastPicker = new avSession.AVCastPickerHelper(context); avCastPicker.on('pickerStateChange', (state: AVCastPickerState) => { console.info(`picker state change : ${state}`); }); } ``` ## off('pickerStateChange')14+ off(type: 'pickerStateChange', callback?: Callback) : void 取消半模态窗口变化事件监听。指定callback,可取消对应监听;未指定callback,取消所有事件监听。 **原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.Multimedia.AVSession.AVCast **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------------------------------------------ | ---- | ------------------------------------------------------ | | type | string | 是 | 取消对应的监听事件,支持事件`'pickerStateChange'`。 | | callback | Callback\<[AVCastPickerState](js-apis-avCastPickerParam.md#avcastpickerstate11)> | 否 | 回调函数,参数state是变化后的半模态窗口状态。
当监听事件取消成功,err为undefined,否则返回错误对象。
该参数为可选参数,若不填写该参数,则认为取消所有相关会话的事件监听。 | **错误码:** 以下错误码的详细介绍请参见[媒体会话管理错误码](errorcode-avsession.md)。 | 错误码ID | 错误信息 | | -------- | ---------------------------------------- | | 401 | parameter check failed. 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. | | 6600101 | Session service exception. | **示例:** ```ts import { common } from '@kit.AbilityKit'; import { avSession } from '@kit.AVSessionKit'; async function onPickerStateChange(context: common.Context) { let avCastPicker = new avSession.AVCastPickerHelper(context); avCastPicker.off('pickerStateChange'); } ```