1# Class (AVCastPickerHelper) 2<!--Kit: AVSession Kit--> 3<!--Subsystem: Multimedia--> 4<!--Owner: @ccfriend; @liao_qian--> 5<!--Designer: @ccfriend--> 6<!--Tester: @chenmingxi1_huawei--> 7<!--Adviser: @zengyawen--> 8 9> **说明:** 10> 11> - 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 12> - 本Class首批接口从API version 14开始支持。 13 14投播半模态对象,可拉起半模态窗口,选择投播设备。在使用前,需要创建AVCastPickerHelper实例。 15 16## 导入模块 17 18```ts 19import { avSession } from '@kit.AVSessionKit'; 20``` 21 22## constructor<sup>14+</sup> 23 24constructor(context: Context) 25 26创建AVCastPickerHelper对象,获取context参考[getHostContext](../apis-arkui/arkts-apis-uicontext-uicontext.md#gethostcontext12)。 27 28**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 29 30**系统能力:** SystemCapability.Multimedia.AVSession.AVCast 31 32**参数:** 33 34| 参数名 | 类型 | 必填 | 说明 | 35| --------- | ----------------------------------------------------------- | ---- | ------------------------------------------------------------ | 36| context | Context | 是 | 应用上下文(仅支持[UIAbilityContext](../apis-ability-kit/js-apis-inner-application-uiAbilityContext.md))。 | 37 38**错误码:** 39 40以下错误码的详细介绍请参见[媒体会话管理错误码](errorcode-avsession.md)。 41 42| 错误码ID | 错误信息 | 43| -------- | ---------------------------------------- | 44| 401 | parameter check failed. 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. | 45| 6600101 | Session service exception. | 46 47**示例:** 48 49```ts 50import { common } from '@kit.AbilityKit'; 51import { avSession } from '@kit.AVSessionKit'; 52@Entry 53@Component 54struct Index { 55 @State message: string = 'hello world'; 56 57 build() { 58 Row() { 59 Column() { 60 Text(this.message) 61 .fontSize(40) 62 .fontWeight(FontWeight.Bold) 63 .onClick(()=>{ 64 let context = this.getUIContext().getHostContext() as Context; 65 let avCastPicker = new avSession.AVCastPickerHelper(context); 66 }) 67 } 68 .width('100%') 69 } 70 .height('100%') 71 } 72} 73``` 74 75## select<sup>14+</sup> 76 77select(options?: AVCastPickerOptions): Promise\<void> 78 79通过选择模式拉起AVCastPicker界面,用户可以选择投播设备。接口采用Promise异步返回形式,传入可选参数AVCastPickerOptions对象,无返回值。 80 81**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 82 83**系统能力:** SystemCapability.Multimedia.AVSession.AVCast 84 85**参数:** 86 87| 参数名 | 类型 | 必填 | 说明 | 88| --------- | ----------------------------------------------------------- | ---- | ------------------------------------------------------------ | 89| options | [AVCastPickerOptions](arkts-apis-avsession-i.md#avcastpickeroptions14) | 否 | AVCastPicker选择选项。无此参数时,以AVCastPickerOptions默认值拉起。 | 90 91**返回值:** 92 93| 类型 | 说明 | 94| -------------- | ----------------------------- | 95| Promise\<void> | Promise对象。当命令发送成功,无返回结果,否则返回错误对象。 | 96 97**错误码:** 98 99以下错误码的详细介绍请参见[媒体会话管理错误码](errorcode-avsession.md)。 100 101| 错误码ID | 错误信息 | 102| -------- | ---------------------------------------- | 103| 401 | parameter check failed. 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. | 104 105**示例:** 106 107```ts 108import { common } from '@kit.AbilityKit'; 109import { BusinessError } from '@kit.BasicServicesKit'; 110import { avSession } from '@kit.AVSessionKit'; 111 112async function avCastPicker(context: common.Context) { 113 let avCastPickerOptions : avSession.AVCastPickerOptions = { 114 sessionType : 'video', 115 } 116 let avCastPicker = new avSession.AVCastPickerHelper(context); 117 avCastPicker.select(avCastPickerOptions).then(() => { 118 console.info('select successfully'); 119 }).catch((err: BusinessError) => { 120 console.error(`AVCastPicker.select failed with err: ${err.code}, ${err.message}`); 121 }); 122} 123``` 124 125## on('pickerStateChange')<sup>14+</sup> 126 127on(type: 'pickerStateChange', callback: Callback<AVCastPickerState\>) : void 128 129设置半模态窗口变化的监听事件。 130 131每个指令支持注册多个回调,如果需要只执行最新监听,需要先注销旧的监听,否则新旧监听都会触发回调。 132 133**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 134 135**系统能力:** SystemCapability.Multimedia.AVSession.AVCast 136 137**参数:** 138 139| 参数名 | 类型 | 必填 | 说明 | 140| --------| -----------|-----|------------| 141| type | string | 是 | 事件回调类型,支持事件`'pickerStateChange'`:当半模态窗口变化时,触发该事件。 | 142| callback | Callback\<[AVCastPickerState](js-apis-avCastPickerParam.md#avcastpickerstate11)> | 是 | 回调函数,参数state是变化后的半模态窗口状态。| 143 144**错误码:** 145 146以下错误码的详细介绍请参见[媒体会话管理错误码](errorcode-avsession.md)。 147 148| 错误码ID | 错误信息 | 149| -------- | ---------------------------------------- | 150| 401 | parameter check failed. 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. | 151| 6600101 | Session service exception. | 152 153**示例:** 154 155```ts 156import { common } from '@kit.AbilityKit'; 157import { AVCastPickerState } from '@kit.AVSessionKit'; 158import { avSession } from '@kit.AVSessionKit'; 159 160async function onPickerStateChange(context: common.Context) { 161 let avCastPicker = new avSession.AVCastPickerHelper(context); 162 avCastPicker.on('pickerStateChange', (state: AVCastPickerState) => { 163 console.info(`picker state change : ${state}`); 164 }); 165} 166``` 167 168## off('pickerStateChange')<sup>14+</sup> 169 170off(type: 'pickerStateChange', callback?: Callback<AVCastPickerState\>) : void 171 172取消半模态窗口变化事件监听。指定callback,可取消对应监听;未指定callback,取消所有事件监听。 173 174**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 175 176**系统能力:** SystemCapability.Multimedia.AVSession.AVCast 177 178**参数:** 179 180| 参数名 | 类型 | 必填 | 说明 | 181| -------- | ------------------------------------------------ | ---- | ------------------------------------------------------ | 182| type | string | 是 | 取消对应的监听事件,支持事件`'pickerStateChange'`。 | 183| callback | Callback\<[AVCastPickerState](js-apis-avCastPickerParam.md#avcastpickerstate11)> | 否 | 回调函数,参数state是变化后的半模态窗口状态。<br>当监听事件取消成功,err为undefined,否则返回错误对象。<br>该参数为可选参数,若不填写该参数,则认为取消所有相关会话的事件监听。 | 184 185**错误码:** 186 187以下错误码的详细介绍请参见[媒体会话管理错误码](errorcode-avsession.md)。 188 189| 错误码ID | 错误信息 | 190| -------- | ---------------------------------------- | 191| 401 | parameter check failed. 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. | 192| 6600101 | Session service exception. | 193 194**示例:** 195 196```ts 197import { common } from '@kit.AbilityKit'; 198import { avSession } from '@kit.AVSessionKit'; 199 200async function onPickerStateChange(context: common.Context) { 201 let avCastPicker = new avSession.AVCastPickerHelper(context); 202 avCastPicker.off('pickerStateChange'); 203} 204``` 205