1# @ohos.file.PhotoPickerComponent (Photo Picker组件)
2
3应用可以在布局中嵌入Photo Picker组件,通过此组件,应用无需申请权限,即可访问公共目录中的图片或视频文件。仅包含读权限。
4应用嵌入组件后,用户可直接在Photo Picker组件中选择图片或视频文件。
5
6> **说明:**
7>
8> 该组件从API version 12开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
9
10## 导入模块
11
12```ts
13import {
14  PhotoPickerComponent, PickerController, PickerOptions,
15  DataType, BaseItemInfo, ItemInfo, PhotoBrowserInfo, AnimatorParams,
16  MaxSelected, ItemType, ClickType, PickerOrientation,
17  SelectMode, PickerColorMode, ReminderMode, MaxCountType, PhotoBrowserRange, PhotoBrowserUIElement,
18  ItemsDeletedCallback, ExceedMaxSeletedCallback, CurrentAlbumDeletedCallback
19} from '@ohos.file.PhotoPickerComponent';
20```
21
22## 属性
23
24支持[通用属性](../apis-arkui/arkui-ts/ts-universal-attributes-size.md)。
25
26## PhotoPickerComponent
27
28PhotoPickerComponent({
29  pickerOptions?: PickerOptions,
30  onSelect?: (uri: string) => void,
31  onDeselect?: (uri: string) => void,
32  onItemClicked?: (itemInfo: ItemInfo, clickType: ClickType) => boolean,
33  onEnterPhotoBrowser?: (photoBrowserInfo: PhotoBrowserInfo) => boolean,
34  onExitPhotoBrowser?: (photoBrowserInfo: PhotoBrowserInfo) => boolean,
35  onPickerControllerReady?: () => void,
36  onPhotoBrowserChanged?: (browserItemInfo: BaseItemInfo) => boolean,
37  onSelectedItemsDeleted?: ItemsDeletedCallback,
38  onExceedMaxSelected?: ExceedMaxSeletedCallback,
39  onCurrentAlbumDeleted?: CurrentAlbumDeletedCallback,
40  pickerController: PickerController
41})
42
43应用可以在布局中嵌入PhotoPickerComponent组件,通过此组件,应用无需申请权限,即可访问公共目录中的图片或视频文件。
44
45> **说明:**
46> 如果当前PhotoPickerComponent组件嵌套在Tabs组件中使用,Tabs组件的左右滑动会与图片选择大图界面的左右滑动切换手势发生冲突。
47>
48> 可在进退大图的回调中设置Tabs组件是否支持滑动来规避,该问题将在后续版本修复。
49
50**装饰器类型**:@Component
51
52**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
53
54**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
55
56**参数:**
57
58| 名称                      | 类型                                                                               | 必填  | 装饰器说明      | 参数描述                                                                                                                                                                                                                                                                                                                                                            |
59|-------------------------|----------------------------------------------------------------------------------|-----|------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
60| pickerOptions           | [PickerOptions](#pickeroptions)                                                  | 否   | - | picker参数信息。                                                                                                                                                                                                                                                                                                                                                     |
61| onSelect                | (uri: string) => void                                                            | 否   | - | 用户在Picker组件中勾选图片时产生的回调事件,将图片uri报给应用。                                                                                                                                                                                                                                                                                                                            |
62| onDeselect              | (uri: string) => void                                                            | 否   | - | 用户在Picker组件中取消勾选图片时产生的回调事件,同时也会将图片uri报给应用。                                                                                                                                                                                                                                                                                                                      |
63| onItemClicked           | (itemInfo: [ItemInfo](#iteminfo), clickType: [ClickType](#clicktype)) => boolean | 否   | - | 用户在picker组件中点击item产生的回调事件。<br>点击图片(缩略图item)时,返回值为true则勾选此图片,否则不响应勾选,uri不授权;点击相机item,返回值为true则拉起系统相机,否则不拉起相机,由应用自行处理。                                                                                                                                                                                                                                            |
64| onEnterPhotoBrowser     | (photoBrowserInfo: [PhotoBrowserInfo](#photobrowserinfo)) => boolean             | 否   | - | 点击进入大图时产生的回调事件,将大图相关信息报给应用。                                                                                                                                                                                                                                                                                                                                     |
65| onExitPhotoBrowser      | (photoBrowserInfo: [PhotoBrowserInfo](#photobrowserinfo)) => boolean             | 否   | - | 退出大图时产生的回调事件,将大图相关信息报给应用。                                                                                                                                                                                                                                                                                                                                       |
66| onPickerControllerReady | () => void                                                                       | 否   | - | 当pickerController可用时产生的回调事件。<br>调用PickerController相关接口需在该回调后才能生效。                                                                                                                                                                                                                                                                                               |
67| onPhotoBrowserChanged   | (browserItemInfo: [BaseItemInfo](#baseiteminfo)) => boolean                      | 否   | - | 大图左右滑动时产生的回调事件,将大图相关信息报给应用。                                                                                                                                                                                                                                                                                                                                     |
68| onSelectedItemsDeleted<sup>13+</sup>  | [ItemsDeletedCallback](#itemsdeletedcallback13)                                  | 否   | - | 已勾选的图片被删除时产生的回调,并将被删除图片的相关信息回调给应用。                                                                                                                                                                                                                                                                                                                              |
69| onExceedMaxSelected<sup>13+</sup>     | [ExceedMaxSeletedCallback](#exceedmaxseletedcallback13)                          | 否   | - | 选择达到最大选择数量(最大图片选择数量或者是最大视频选择数量亦或是总的最大选择数量)之后再次点击勾选时产生的回调。<br>- 若选择的数量达到了最大图片选择数量且未达到总的最大选择数量则回调的参数exceedMaxCountType为[MaxCountType](#maxcounttype).PHOTO_MAX_COUNT。<br>- 若选择的数量达到了最大视频选择数量且未达到总的最大选择数量则回调的参数exceedMaxCountType为[MaxCountType](#maxcounttype).VIDEO_MAX_COUNT。<br>- 只要选择的数量达到了总的最大选择数量则回调的的参数exceedMaxCountType为[MaxCountType](#maxcounttype).TOTAL_MAX_COUNT。 |
70| onCurrentAlbumDeleted<sup>13+</sup>   | [CurrentAlbumDeletedCallback](#currentalbumdeletedcallback13)                    | 否   | - | 当前相册被删除时产生的回调。<br>当前相册是指通过pickerContorller.[setData](#setdata)([DataType](#datatype).SET_ALBUM_URI, currentAlbumUri)接口设置给宫格组件的相册,即“currentAlbumUri”。<br>当前相册被删除后若使用方向刷新自己的相册标题栏,使用方可以设置自己的标题栏名称为默认的相册名例如“图片和视频”、“图片”或“视频”,然后通过pickerContorller.[setData](#setdata)([DataType](#datatype).SET_ALBUM_URI, '')接口传空串去刷新宫格页为默认相册。                                  |
71| pickerController        | [PickerController](#pickercontroller)                                            | 否   | @ObjectLink | 应用可通过PickerController向Picker组件发送数据。                                                                                                                                                                                                                                                                                                                             |
72
73## PickerOptions
74
75继承自[BaseSelectOptions](js-apis-photoAccessHelper.md#baseselectoptions12)。
76
77Picker配置选项。
78
79**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
80
81**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
82
83| 名称                              | 类型                                      | 必填  | 说明                                                                       |
84|---------------------------------|-----------------------------------------|-----|--------------------------------------------------------------------------|
85| checkBoxColor                   | string                                  | 否   | 勾选框的背景色。格式为8位十六进制颜色代码。                                                   |
86| backgroundColor                 | string                                  | 否   | picker宫格页面背景色。格式为8位十六进制颜色代码。                                             |
87| isRepeatSelectSupported         | boolean                                 | 否   | 是否支持单张图片重复选择。true表示支持。                                                   |
88| checkboxTextColor               | string                                  | 否   | 勾选框内文本颜色。格式为8位十六进制颜色代码。 (该能力暂不支持)                                        |
89| photoBrowserBackgroundColorMode | [PickerColorMode](#pickercolormode)     | 否   | 大图背景颜色。包括跟随系统、浅色模式以及深色模式,默认为跟随系统。                                        |
90| maxSelectedReminderMode         | [ReminderMode](#remindermode)           | 否   | 选择数量达到最大时的提示方式。包括弹toast提示、不提示以及蒙层提示,默认为弹toast提示。                         |
91| orientation                     | [PickerOrientation](#pickerorientation) | 否   | 宫格页面滑动预览方向,包括水平和竖直两个方向,默认为竖直方向。(该能力暂不支持)                                 |
92| selectMode                      | [SelectMode](#selectmode)               | 否   | 选择模式。包括多选和单选,默认为多选。                                                      |
93| maxPhotoSelectNumber            | number                                  | 否   | 图片最大的选择数量。最大值为500,受到最大选择总数的限制。                                           |
94| maxVideoSelectNumber            | number                                  | 否   | 视频最大的选择数量。最大值为500,受到最大选择总数的限制。                                           |
95| isSlidingSelectionSupported<sup>13+</sup>     | boolean                                 | 否   | 是否支持滑动多选,默认不支持。重复选择场景不支持滑动多选。                                            |
96| photoBrowserCheckboxPosition<sup>13+</sup>    | [number, number]                        | 否   | 设置大图页checkbox的位置。第一个参数为X方向偏移量,第二个参数为Y方向偏移量。传参范围0-1,代表距离组件左上角0%-100%的偏移量。 |
97
98## ItemsDeletedCallback<sup>13+</sup>
99
100type ItemsDeletedCallback = (baseItemInfos: Array&lt;BaseItemInfo&gt;) => void
101
102已勾选的图片被删除时产生的回调事件。
103
104**原子化服务API:** 从API version 13开始,该接口支持在原子化服务中使用。
105
106**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
107
108**参数:**
109
110| 参数名 | 类型                                         | 必填 | 说明       |
111| -------- |--------------------------------------------| -------- |----------|
112| baseItemInfos | Array&lt;[BaseItemInfo](#baseiteminfo)&gt; | 是 | 照片的基本信息。 |
113
114## ExceedMaxSeletedCallback<sup>13+</sup>
115
116type ExceedMaxSeletedCallback = (exceedMaxCountType: MaxCountType) => void
117
118选择达到最大选择数量之后再次点击勾选时的回调事件。
119
120**原子化服务API:** 从API version 13开始,该接口支持在原子化服务中使用。
121
122**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
123
124**参数:**
125
126| 参数名 | 类型                            | 必填 | 说明                                           |
127| -------- |-------------------------------| -------- |----------------------------------------------|
128| exceedMaxCountType | [MaxCountType](#maxcounttype) | 是 | 达到最大选择数量的类型。类型包含图片最大选择数量、视频最大选择数量以及总的最大选择数量。 |
129
130## CurrentAlbumDeletedCallback<sup>13+</sup>
131
132type CurrentAlbumDeletedCallback = () => void
133
134当前相册被删除时的回调事件。
135
136**原子化服务API:** 从API version 13开始,该接口支持在原子化服务中使用。
137
138**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
139
140## PickerController
141
142应用可通过PickerController向picker组件发送数据。
143
144**装饰器类型**:@Observed
145
146**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
147
148**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
149
150### setData
151
152setData(dataType: DataType, data: Object): void
153
154应用可通过该接口向picker组件发送数据,并通过DataType来区分具体发送什么类型的数据。
155
156**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
157
158**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
159
160**参数:**
161
162|  参数名        | 类型                                    | 必填  | 说明  |
163| ------------------------- | ------------------ | ----- | --------------- |
164| dataType | [DataType](#datatype) | 是 | 发送数据的数据类型。|
165| data | Object | 是 | 发送的数据。 | 
166
167### setMaxSelected
168
169setMaxSelected(maxSelected: MaxSelected): void
170
171应用可通过该接口,实时地设置图片的最大选择数量、视频的最大选择数量以及总的最大选择数量。
172
173**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
174
175**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
176
177**参数:**
178
179|  参数名        | 类型                                    | 必填  | 说明     |
180| ------------------------- | ------------------ | ----- | --------------- |
181| maxSelected | [MaxSelected](#maxselected) | 是 | 最大选择数量。|
182
183### setPhotoBrowserItem
184
185setPhotoBrowserItem(uri: string, photoBrowserRange?: PhotoBrowserRange): void
186
187应用可通过该接口,切换picker组件至大图浏览模式浏览图片;当已处于大图浏览模式时,切换浏览的图片。
188
189**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
190
191**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
192
193**参数:**
194
195|  参数名        | 类型                                    | 必填  | 说明  |
196| ------------------------- | ------------------ | ----- | --------------- |
197| uri | string | 是 | 指定大图浏览的图片uri。仅支持指定用户已选择的图片,未选择的图片不生效。|
198| photoBrowserRange | [PhotoBrowserRange](#photobrowserrange) | 否 | 打开大图浏览模式后,左右滑动切换浏览图片的范围,可配置仅浏览用户选择的或浏览全部图片,视频。默认:PhotoBrowserRange.ALL。浏览全部图片,视频。 | 
199
200### exitPhotoBrowser<sup>13+</sup>
201
202exitPhotoBrowser(): void
203
204应用可通过该接口,向picker发送退出大图的通知。
205
206**原子化服务API**:从API version 13开始,该接口支持在原子化服务中使用。
207
208**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
209
210### setPhotoBrowserUIElementVisibility<sup>13+</sup>
211
212setPhotoBrowserUIElementVisibility(elements: Array&lt;PhotoBrowserUIElement&gt;, isVisible: boolean): void
213
214应用可通过该接口,设置大图页大图预览组件外其他UI元素是否可见。不设置则默认可见。
215
216**原子化服务API**:从API version 13开始,该接口支持在原子化服务中使用。
217
218**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
219
220**参数:**
221
222| 参数名         | 类型                                                             | 必填  | 说明                |
223|-------------|----------------------------------------------------------------| ----- |-------------------|
224| elements    | Array&lt;[PhotoBrowserUIElement](#photobrowseruielement13)&gt; | 是 | 大图页大图预览组件外其他UI元素。 |
225| isVisible | boolean                                                        | 是 | 是否可见。             |
226
227## BaseItemInfo
228
229图片、视频相关信息。
230
231**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
232
233**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
234
235| 名称     | 类型    | 必填  | 说明                                                |
236|----------|--------|-----|---------------------------------------------------|
237| uri      | string                | 否   | 图片、视频的uri(itemType为ThUMBNAIL时支持,否则为空)。            |
238| mimeType | string                | 否   | 图片、视频的mimeType(itemType为ThUMBNAIL时支持,否则为空)。       |
239| width    | number                | 否   | 图片、视频的宽(单位:像素)(itemType为ThUMBNAIL时支持,否则为空)。       |
240| height   | number                | 否   | 图片、视频的高(单位:像素)(itemType为ThUMBNAIL时支持,否则为空)。       |
241| size     | number                | 否   | 图片、视频的大小(单位:千字节)(itemType为ThUMBNAIL时支持,否则为空)。     |
242| duration   | number                | 否   | 视频的时长(单位:毫秒),图片时返回-1(itemType为ThUMBNAIL时支持,否则为空)。 |
243
244## ItemInfo
245
246继承自[BaseItemInfo],仅含私有参数itemType
247
248图片、视频相关信息。
249
250**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
251
252**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
253
254| 名称     | 类型    | 必填  | 说明                                                |
255|----------|--------|-----|---------------------------------------------------|
256| itemType | [ItemType](#itemtype) | 否   | 被点击的item类型。包括缩略图item和相机item。                      |
257
258## PhotoBrowserInfo
259
260大图相关信息。
261
262**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
263
264**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
265
266| 名称     | 类型    | 必填  | 说明     |
267|----------|--------|-----|---------|
268| animatorParams | [AnimatorParams](#animatorparams) | 否   | 进入、退出大图界面时的动效参数。 |
269
270## AnimatorParams
271
272进退大图动效参数。
273
274**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
275
276**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
277
278| 名称     | 类型    | 必填  | 说明           |
279|----------|--------|-----|--------------|
280| duration | number  | 否            | 动效时长(单位:毫秒)。 |
281| curve      | [Curve](../apis-arkui/js-apis-curve.md#curve) &verbar; [ICurve](../apis-arkui/js-apis-curve.md#icurve9) &verbar; string | 否   | 动效曲线。        |
282
283## MaxSelected
284
285最大选择数量。
286
287**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
288
289**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
290
291| 名称     | 类型    | 必填  | 说明     |
292|----------|--------|-----|---------|
293| data | Map&lt;[MaxCountType](#maxcounttype), number&gt; | 否             | 最大选择数量(包含图片的最大选择数量、视频的最大选择数量以及总的最大选择数量) |
294
295## DataType
296
297枚举,PickerController向picker组件发送数据的数据类型。
298
299**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
300
301**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
302
303| 名称                | 值   | 说明                                                                                                                 |
304|-------------------|-----|--------------------------------------------------------------------------------------------------------------------|
305| SET_SELECTED_URIS | 1   | 发送已选择的数据列表,通知picker组件勾选状态刷新,需要传入string数组类型。<br>例如:应用在自己的页面中删除某张图片后,需要把剩下的已选择的数据列表通过setData接口通知到picker组件,从而触发picker组件勾选框状态刷新正确。 |
306| SET_ALBUM_URI | 2   | 应用按需设置图片的最大选择数量、视频的最大选择数量以及总的最大选择数量。 |
307
308## ItemType
309
310被点击item的类型。
311
312**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
313
314**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
315
316| 名称                | 值   | 说明         |
317|-------------------|-----|------------|
318| THUMBNAIL | 0   | 图片、视频item(缩略图item)。 |
319| CAMERA | 1   | 相机item。    |
320
321## ClickType
322
323点击操作的类型。
324
325**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
326
327**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
328
329| 名称                | 值   | 说明                     |
330|-------------------|-----|------------------------|
331| SELECTED | 0   | 选择操作(勾选图片或者点击相机item)。 |
332| DESELECTED | 1   | 取消选择操作(取消勾选图片)。       |
333
334## PickerOrientation
335
336Picker宫格页面滑动预览的方向。(该能力暂不支持)
337
338**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
339
340**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
341
342| 名称                | 值   | 说明    |
343|-------------------|-----|-------|
344| VERTICAL | 0   | 竖直方向。 |
345| HORIZONTAL | 1   | 水平方向。 |
346
347## SelectMode
348
349选择模式。
350
351**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
352
353**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
354
355| 名称                | 值   | 说明    |
356|-------------------|-----|-------|
357| SINGLE_SELECT | 0   | 单选模式。 |
358| MULTI_SELECT | 1   | 多选模式。 |
359
360## PickerColorMode
361
362Picker的颜色模式。
363
364**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
365
366**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core367
368| 名称                | 值   | 说明    |
369|-------------------|-----|-------|
370| AUTO | 0   | 跟随系统。 |
371| LIGHT | 1   | 浅色模式。 |
372| DARK | 2   | 深色模式。 |
373
374## ReminderMode
375
376最大选择数量提示方式。
377
378**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
379
380**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
381
382| 名称                | 值   | 说明        |
383|-------------------|-----|-----------|
384| NONE | 0   | 不提示。      |
385| TOAST | 1   | 弹toast提示。 |
386| MASK | 2   | 蒙灰提示。     |
387
388## MaxCountType
389
390最大选择数量的类型。
391
392**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
393
394**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
395
396| 名称                | 值   | 说明                        |
397|-------------------|-----|---------------------------|
398| TOTAL_MAX_COUNT | 0   | 总的最大选择数量。                 |
399| PHOTO_MAX_COUNT | 1   | 图片的最大选择数量(不能大于总的最大选择数量)。 |
400| VIDEO_MAX_COUNT | 2   | 视频的最大选择数量(不能大于总的最大选择数量)。 |
401
402## PhotoBrowserRange
403
404打开大图浏览模式后,左右滑动切换浏览图片的范围。
405
406**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
407
408**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
409
410| 名称                | 值   | 说明                        |
411|-------------------|-----|---------------------------|
412| ALL | 0   | 全部图片,视频。                 |
413| SELECTED_ONLY | 1   | 仅用户已选择的图片,视频。 |
414
415## PhotoBrowserUIElement<sup>13+</sup>
416
417大图页大图预览组件外其他UI元素。
418
419**原子化服务API**:从API version 13开始,该接口支持在原子化服务中使用。
420
421**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
422
423| 名称          | 值   | 说明       |
424|-------------|-----|----------|
425| CHECKBOX    | 0   | 大图页勾选框。  |
426| BACK_BUTTON | 1   | 大图页返回按钮。 |
427
428## 示例
429
430```ts
431// xxx.ets
432import {
433  PhotoPickerComponent, PickerController, PickerOptions,
434  DataType, BaseItemInfo, ItemInfo, PhotoBrowserInfo, AnimatorParams,
435  MaxSelected, ItemType, ClickType, PickerOrientation,
436  SelectMode, PickerColorMode, ReminderMode, MaxCountType, PhotoBrowserRange, PhotoBrowserUIElement,
437  ItemsDeletedCallback, ExceedMaxSeletedCallback, CurrentAlbumDeletedCallback
438} from '@ohos.file.PhotoPickerComponent';
439import photoAccessHelper from '@ohos.file.photoAccessHelper';
440
441@Entry
442@Component
443struct PickerDemo {
444  pickerOptions: PickerOptions = new PickerOptions();
445  @State pickerController: PickerController = new PickerController();
446  @State selectUris: Array<string> = new Array<string>();
447  @State currentUri: string = '';
448  @State isBrowserShow: boolean = false;
449  private selectedItemsDeletedCallback: ItemsDeletedCallback = (baseItemInfos: Array<BaseItemInfo>) => this.onSelectedItemsDeleted(recentPhotoExists);
450  private exceedMaxSeletedCallback: ExceedMaxSeletedCallback = (exceedMaxCountType: MaxCountType) => this.onExceedMaxSelected(recentPhotoInfo);
451  private currentAlbumDeletedCallback: CurrentAlbumDeletedCallback = () => this.onCurrentAlbumDeleted();
452
453  aboutToAppear() {
454    this.pickerOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_VIDEO_TYPE;
455    this.pickerOptions.maxSelectNumber = 5;
456    this.pickerOptions.isSearchSupported = false;
457    this.pickerOptions.isPhotoTakingSupported = false;
458    this.pickerOptions.photoBrowserCheckboxPosition = [0.5, 0.5];
459    // 其他属性.....
460  }
461  
462  private onSelect(uri: string): void {
463    // 添加
464    if (uri) {
465      this.selectUris.push(uri);
466    }
467  }
468
469  private onDeselect(uri: string): void {
470    // 移除
471    if (uri) {
472      this.selectUris = this.selectUris.filter((item: string) => {
473        return item != uri;
474      })
475    }
476  }
477  
478  private onItemClicked(itemInfo: ItemInfo, clickType: ClickType): boolean {
479    if (!itemInfo) {
480       return false;
481    }
482    let type: ItemType | undefined = itemInfo.itemType;
483    let uri: string | undefined = itemInfo.uri;
484    if (type === ItemType.CAMERA) {
485      // 点击相机item
486      return true; // 返回true则拉起系统相机,若应用需要自行处理则返回false。
487    } else {
488      if (clickType === ClickType.SELECTED) {
489        // 应用做自己的业务处理
490        if (uri) {
491          this.selectUris.push(uri);
492          this.pickerOptions.preselectedUris = [...this.selectUris];
493        }
494        return true; // 返回true则勾选,否则则不响应勾选。
495      } else {
496        if (uri) {
497          this.selectUris = this.selectUris.filter((item: string) => {
498          return item != uri;
499          });
500          this.pickerOptions.preselectedUris = [...this.selectUris];
501        }
502      }
503      return true;
504    }
505  }
506  
507  private onEnterPhotoBrowser(photoBrowserInfo: PhotoBrowserInfo): boolean {
508    // 进入大图的回调
509    this.isBrowserShow = true;
510    return true;
511  }
512  
513  private onExitPhotoBrowser(photoBrowserInfo: PhotoBrowserInfo): boolean {
514    // 退出大图的回调
515    this.isBrowserShow = false;
516    return true;
517  }
518  
519  private onPickerControllerReady(): void {
520    // 接收到该回调后,便可通过pickerController相关接口向picker发送数据,在此之前不生效。
521    let elements: number[] = [PhotoBrowserUIElement.BACK_BUTTON];
522    this.pickerController.setPhotoBrowserUIElementVisibility(elements, false); // 设置大图页不显示返回按钮
523  }
524
525  private onPhotoBrowserChanged(browserItemInfo: BaseItemInfo): boolean {
526    // 大图左右滑动的回调
527    this.currentUri = browserItemInfo.uri ?? '';
528    return true;
529  }
530
531  private onSelectedItemsDeleted(baseItemInfos: Array<BaseItemInfo>): void {
532    // 已勾选图片被删除时的回调
533  }
534
535  private onExceedMaxSelected(exceedMaxCountType: MaxCountType): void {
536    // 超过最大选择数量再次点击时的回调
537  }
538
539  private onCurrentAlbumDeleted(): void {
540    // 当前相册被删除时的回调
541  }
542
543  build() {
544    Flex({
545      direction: FlexDirection.Column,
546      justifyContent: FlexAlign.Center,
547      alignItems: ItemAlign.Center
548    }) {
549      Column() {
550        if (this.isBrowserShow) {
551          // 这里模拟应用自己的大图返回按钮
552          Row() {
553            Button("退出大图").width('33%').height('8%').onClick(() => {
554              this.pickerController.exitPhotoBrowser();
555            })
556          }.margin({ bottom: 20 })
557        }
558
559        PhotoPickerComponent({
560          pickerOptions: this.pickerOptions,
561          // onSelect: (uri: string): void => this.onSelect(uri),
562          // onDeselect: (uri: string): void => this.onDeselect(uri),
563          onItemClicked: (itemInfo: ItemInfo, clickType: ClickType): boolean => this.onItemClicked(itemInfo, clickType), // 该接口可替代上面两个接口
564          onEnterPhotoBrowser: (photoBrowserInfo: PhotoBrowserInfo): boolean => this.onEnterPhotoBrowser(photoBrowserInfo),
565          onExitPhotoBrowser: (photoBrowserInfo: PhotoBrowserInfo): boolean => this.onExitPhotoBrowser(photoBrowserInfo),
566          onPickerControllerReady: (): void => this.onPickerControllerReady(),
567          onPhotoBrowserChanged: (browserItemInfo: BaseItemInfo): boolean => this.onPhotoBrowserChanged(browserItemInfo),
568          onSelectedItemsDeleted?: this.selectedItemsDeletedCallback,
569          onExceedMaxSelected?: this.exceedMaxSeletedCallback,
570          onCurrentAlbumDeleted?: this.currentAlbumDeletedCallback,
571          pickerController: this.pickerController,
572        }).height('60%').width('100%')
573
574        // 这里模拟应用侧底部的选择栏
575        if (this.isBrowserShow) {
576          Row() {
577            ForEach(this.selectUris, (uri: string) => {
578              if (uri === this.currentUri) {
579                Image(uri).height('10%').width('10%').onClick(() => {
580                }).borderWidth(1).borderColor('red')
581              } else {
582                Image(uri).height('10%').width('10%').onClick(() => {
583                  this.pickerController.setData(DataType.SET_SELECTED_URIS, this.selectUris);
584                  this.pickerController.setPhotoBrowserItem(uri, PhotoBrowserRange.ALL);
585                })
586              }
587            }, (uri: string) => JSON.stringify(uri))
588          }
589        } else {
590          Button('预览').width('33%').height('5%').onClick(() => {
591            if (this.selectUris.length > 0) {
592              this.pickerController.setPhotoBrowserItem(this.selectUris[0], PhotoBrowserRange.SELECTED_ONLY);
593            }
594          })
595        }
596      }
597    }
598  }
599}
600```
601