选择器(Picker)是一个封装PhotoViewPicker、DocumentViewPicker、AudioViewPicker等API模块,具有选择与保存的能力。应用可以自行选择使用哪种API实现文件选择和文件保存的功能。该类接口,需要应用在界面UIAbility中调用,否则无法拉起photoPicker应用或FilePicker应用。

👇🏻👇🏻👇🏻求关注👇🏻👇🏻👇🏻

导入模块

import ohos.file_picker.*
    
    var globalAbilityContext: Option<AbilityContext> = Option<AbilityContext>.None
    
    class MainAbility <: Ability {
        public init() {
            super()
            registerSelf()
        }
    
        public override func onCreate(want: Want, launchParam: LaunchParam): Unit {
            AppLog.info("MainAbility OnCreated.")
            globalAbilityContext = Option<AbilityContext>.Some(this.context)
        }
    
        public override func onWindowStageCreate(windowStage: WindowStage): Unit {
            AppLog.info("MainAbility onWindowStageCreate.")
            windowStage.loadContent("MyView")
        }
    }
    
    func createAbility(): MainAbility {
        MainAbility()
    }
    
    let ABILITY_REGISTER_RESULT = Ability.registerCreator("CangjieAbility", createAbility)
    
    func getContext(): AbilityContext {
        match (globalAbilityContext) {
            case Some(context) =>
                context
            case _ =>
                throw Exception("get globalAbilityContext failed")
        }
    }

class PhotoViewPicker

public class PhotoViewPicker {
        public PhotoViewPicker(let abilityContext: AbilityContext) {}
    }

图库选择器对象,用来支撑选择图片/视频和保存图片/视频等用户场景。选择文件推荐使用PhotoAccessHelper的PhotoViewPicker。在使用前,需要先通过AbilityContext创建PhotoViewPicker实例。

系统能力:SystemCapability.FileManagement.UserFileService

示例:

let actualContext: AbilityContext = getContext()
    
let photoPicker = PhotoViewPicker(actualContext)

func select(AsyncCallback,Option)

public func select(callback: AsyncCallback<PhotoSelectResult>, option!: PhotoSelectOptions = PhotoSelectOptions()): Unit

通过选择模式拉起photoPicker界面,用户可以选择一个或多个图片/视频。接口采用callback异步返回形式,传入参数PhotoSelectOptions对象,返回PhotoSelectResult对象。

注意:此接口返回的PhotoSelectResult对象中的photoUris只能通过临时授权的方式调用photoAccessHelper.getAssets接口去使用,具体使用方式参见用户文件URI介绍中的媒体文件URI的使用方式。

系统能力:SystemCapability.FileManagement.UserFileService

参数:

参数名 类型 必填 说明
callback AsyncCallback callback 返回photoPicker选择后的结果集。
option PhotoSelectOptions photoPicker选择选项。

示例:

import ohos.file_picker.*
    let actualContext: AbilityContext = getContext()
    let picker = PhotoViewPicker(actualContext)
    let option = PhotoSelectOptions(MIMEType: VIDEO_TYPE, maxSelectNumber: 20)
    let photoResultCallback = {
        errorCode: Option<AsyncError>, data: Option<PhotoSelectResult> => match (errorCode) {
            case Some(e) => 
                AppLog.info("photo select error: errcode is ${e.code}")
            case _ =>
                match (data) {
                    case Some(value) =>
                        AppLog.info("photoUris is ${value.photoUris}")
                        AppLog.info("isOriginalPhoto is ${value.isOriginalPhoto}")
                    case _ => AppLog.info("photo select error: data is null")
                }
        }
    }
    picker.select(photoResultCallback, option: option)

func save(AsyncCallback, Option)

public func save(callback: AsyncCallback<Array<String>>, option!: PhotoSaveOptions = PhotoSaveOptions()): Unit

通过保存模式拉起photoPicker界面,用户可以保存一个或多个图片/视频。接口采用callback异步返回形式,传入参数PhotoSaveOptions对象,返回保存文件的URI数组。

注意:此接口会将文件保存在文件管理器,而不是图库。返回的URI数组的具体使用方式参见用户文件URI介绍中的文档类URI的使用方式。

系统能力:SystemCapability.FileManagement.UserFileService

参数:

参数名 类型 必填 说明
callback AsyncCallback<Array> callback 返回photoPicker保存图片或视频文件后的结果集。
option PhotoSaveOptions photoPicker保存图片或视频文件选项。

示例:

import ohos.file_picker.*
    let actualContext: AbilityContext = getContext()
    let picker = PhotoViewPicker(actualContext)
    let option = PhotoSaveOptions(newFileNames: Array<String>(["PhotoViewPicker.jpg", "PhotoViewPicker.mp4"]))
    let saveCallback = {
        errorCode: Option<AsyncError>, data: Option<Array<String>> => match (errorCode) {
            case Some(e) => 
                AppLog.info("photo save error: errcode is ${e.code}")
            case _ =>
                match (data) {
                    case Some(value) =>
                        AppLog.info("photoUris is ${value}")
                    case _ => AppLog.info("photo save error: data is null")
                }
        }
    }
    picker.save(saveCallback, option: option)

class DocumentViewPicker

public class DocumentViewPicker {
        public DocumentViewPicker(let abilityContext: AbilityContext) {}
    }

文件选择器对象,用来支撑选择和保存各种格式文档。在使用前,需要先创建DocumentViewPicker实例。

系统能力:SystemCapability.FileManagement.UserFileService

示例:

let actualContext: AbilityContext = getContext()
    
let documentPicker = DocumentViewPicker(actualContext)

func select(AsyncCallback, Option)

public func select(callback: AsyncCallback<Array<String>>, option!: DocumentSelectOptions = DocumentSelectOptions()): Unit

通过选择模式拉起documentPicker界面,用户可以选择一个或多个文件。接口采用callback异步返回形式,传入参数DocumentSelectOptions对象,返回选择文件的URI数组。

注意:此接口返回的URI数组的具体使用方式参见用户文件URI介绍中的文档类URI的使用方式。

系统能力:SystemCapability.FileManagement.UserFileService

参数:

参数名 类型 必填 说明
callback AsyncCallback<Array> callback 返回documentPicker选择后的结果集。
option DocumentSelectOptions documentPicker选择选项。

示例:

import ohos.file_picker.*
    let actualContext: AbilityContext = getContext()
    let picker = DocumentViewPicker(actualContext)
    let option = DocumentSelectOptions(selectMode: DocumentSelectMode.MIXED)
    let documentSelectCallback = {
        errorCode: Option<AsyncError>, data: Option<Array<String>> => match (errorCode) {
            case Some(e) => 
                AppLog.info("document select error: errcode is ${e.code}")
            case _ =>
                match (data) {
                    case Some(value) =>
                        AppLog.info("documentUris is ${value}")
                    case _ => AppLog.info("document select error: data is null")
                }
        }
    }
    picker.select(documentSelectCallback, option: option)

func save(AsyncCallback<Array>, Option)

public func save(callback: AsyncCallback<Array<String>>, option!: DocumentSaveOptions = DocumentSaveOptions()): Unit

通过保存模式拉起documentPicker界面,用户可以保存一个或多个文件。接口采用callback异步返回形式,传入参数DocumentSaveOptions对象,返回保存文件的URI数组。

注意:此接口返回的URI数组的具体使用方式参见用户文件URI介绍中的文档类URI的使用方式。

系统能力:SystemCapability.FileManagement.UserFileService

参数:

参数名 类型 必填 说明
callback AsyncCallback<Array> callback 返回documentPicker保存后的结果集。
option DocumentSaveOptions documentPicker保存选项。

示例:

import ohos.file_picker.*
    let actualContext: AbilityContext = getContext()
    let picker = DocumentViewPicker(actualContext)
    let option = DocumentSaveOptions(newFileNames: Array<String>(["DocumentViewPicker.txt"]))
    let saveCallback = {
        errorCode: Option<AsyncError>, data: Option<Array<String>> => match (errorCode) {
            case Some(e) => 
                AppLog.info("document save error: errcode is ${e.code}")
            case _ =>
                match (data) {
                    case Some(value) =>
                        AppLog.info("documentUris is ${value}")
                    case _ => AppLog.info("document save error: data is null")
                }
        }
    }
    picker.save(saveCallback, option: option)

class AudioViewPicker

public class AudioViewPicker {
        public AudioViewPicker(let abilityContext: AbilityContext)
}

音频选择器对象,用来支撑选择和保存音频类文件等用户场景。在使用前,需要先创建AudioViewPicker实例。

系统能力:SystemCapability.FileManagement.UserFileService

示例:

let actualContext: AbilityContext = getContext()
    
let picker = AudioViewPicker(actualContext)

func select(AsyncCallback<Array>, Option)

public func select(callback: AsyncCallback<Array<String>>, option!: AudioSelectOptions = AudioSelectOptions()): Unit

通过选择模式拉起audioPicker界面(目前拉起的是documentPicker,audioPicker在规划中),用户可以选择一个或多个音频文件。接口采用callback异步返回形式,传入参数AudioSelectOptions对象,返回选择音频文件的URI数组。

注意:此接口返回的URI数组的具体使用方式参见用户文件URI介绍中的文档类URI的使用方式。

系统能力:SystemCapability.FileManagement.UserFileService

参数:

参数名 类型 必填 说明
callback AsyncCallback<Array> callback 返回audioPicker选择音频后的结果集。
option AudioSelectOptions audioPicker音频选择选项。

示例:

import ohos.file_picker.*
    let actualContext: AbilityContext = getContext()
    let picker = AudioViewPicker(actualContext)
    let audioSelectCallback = {
        errorCode: Option<AsyncError>, data: Option<Array<String>> => match (errorCode) {
            case Some(e) => 
                AppLog.info("audio select error: errcode is ${e.code}")
            case _ =>
                match (data) {
                    case Some(value) =>
                        AppLog.info("audioUris is ${value}")
                    case _ => AppLog.info("audio select error: data is null")
                }
        }
    }
    picker.select(audioSelectCallback, option: AudioSelectOptions())

func save(AsyncCallback<Array>, Option)

public func save(callback: AsyncCallback<Array<String>>, option!: AudioSaveOptions = AudioSaveOptions()): Unit

通过保存模式拉起audioPicker界面(目前拉起的是documentPicker,audioPicker在规划中),用户可以保存一个或多个音频文件。接口采用callback异步返回形式,传入参数AudioSaveOptions对象,返回保存音频文件的URI数组。

注意:此接口返回的URI数组的具体使用方式参见用户文件URI介绍中的文档类URI的使用方式。

系统能力:SystemCapability.FileManagement.UserFileService

参数:

参数名 类型 必填 说明
callback AsyncCallback<Array> callback 返回audioPicker保存音频文件后的结果集。
option AudioSaveOptions audioPicker保存音频文件选项。

示例:

import ohos.file_picker.*
    let actualContext: AbilityContext = getContext()
    let picker = AudioViewPicker(actualContext)
    let option = AudioSaveOptions(newFileNames: Array<String>(["YourHairLikeSnow.mp3"]))
    let saveCallback = {
        errorCode: Option<AsyncError>, data: Option<Array<String>> => match (errorCode) {
            case Some(e) => 
                AppLog.info("audio save error: errcode is ${e.code}")
            case _ =>
                match (data) {
                    case Some(value) =>
                        AppLog.info("audioUris is ${value}")
                    case _ => AppLog.info("audio save error: data is null")
                }
        }
    }
    picker.save(saveCallback, option: option)

enum PhotoViewMIMETypes

public enum PhotoViewMIMETypes {
        | IMAGE_TYPE
        | VIDEO_TYPE
        | IMAGE_VIDEO_TYPE
    }

枚举,可选择的媒体文件类型。

系统能力:SystemCapability.FileManagement.UserFileService

名称 说明
IMAGE_TYPE 图片类型
VIDEO_TYPE 视频类型
IMAGE_VIDEO_TYPE 图片和视频类型

struct PhotoSelectOptions

public struct PhotoSelectOptions {
        public PhotoSelectOptions (
            public var MIMEType!: PhotoViewMIMETypes = IMAGE_VIDEO_TYPE,
            public var maxSelectNumber!: Int64 = 50
        )
    }

图库选择选项。

系统能力:SystemCapability.FileManagement.UserFileService

名称 类型 必填 说明
MIMEType PhotoViewMIMETypes 可选择的媒体文件类型,若无此参数,则默认为图片和视频类型。
maxSelectNumber Int64 选择媒体文件数量的最大值(默认值为50,最大值为500。如果传入参数小于等于0,则取默认值;如果传入参数大于最大值,则取最大值)。

struct PhotoSelectResult

public struct PhotoSelectResult {
        public PhotoSelectResult (
            public var photoUris: Array<String>,
            public var isOriginalPhoto: Bool
        )
    }

返回图库选择后的结果集。

系统能力:SystemCapability.FileManagement.UserFileService

名称 类型 可读 可写 说明
photoUris Array 返回图库选择后的媒体文件的URI数组,此URI数组只能通过临时授权的方式调用photoAccessHelper.getAssets接口去使用,具体使用方式参见用户文件URI介绍中的媒体文件URI的使用方式。
isOriginalPhoto Bool 返回图库选择后的媒体文件是否为原图。

struct PhotoSaveOptions

public struct PhotoSaveOptions {
        public PhotoSaveOptions (
            public var newFileNames!: Array<String> = Array<String>()
        )
    }

图片或视频的保存选项。

系统能力:SystemCapability.FileManagement.UserFileService

名称 类型 必填 说明
newFileNames Array 拉起photoPicker进行保存图片或视频资源的文件名,若无此参数,则默认需要用户自行输入。

struct DocumentSelectOptions

public struct DocumentSelectOptions {
        public DocumentSelectOptions (
            public var maxSelectNumber!: ?Int64 = None,
            public var defaultFilePathUri!: ?String = None,
            public var fileSuffixFilters!: Array<String> = Array<String>(),
            public var selectMode!: DocumentSelectMode = FILE
        )
    }

文档选择选项。

系统能力:SystemCapability.FileManagement.UserFileService

名称 类型 必填 说明
maxSelectNumber Int64 选择文件最大个数,默认值和上限都是500,有效值范围1-500(输入有效值之外的数采用默认值。选择目录仅支持特定设备)。
defaultFilePathUri String 指定选择的文件或者目录路径。
fileSuffixFilters Array 选择文件的后缀类型,若选择项存在多个后缀名,则每一个后缀名之间用英文逗号进行分隔。
selectMode DocumentSelectMode 支持选择的资源类型,比如:文件、文件夹和二者混合,仅支持特定设备。系统能力:

enum DocumentSelectMode

public enum DocumentSelectMode {
        | FILE
        | FOLDER
        | MIXED
    }

枚举,picker选择的文档类型。

系统能力:SystemCapability.FileManagement.UserFileService.FolderSelection

名称 说明
FILE 文件类型
FOLDER 文件夹类型
MIXED 文件和文件夹混合类型

struct DocumentSaveOptions

public struct DocumentSaveOptions {
        public DocumentSaveOptions (
            public var newFileNames!: Array<String> = Array<String>(),
            public var defaultFilePathUri!: ?String = None,
            public var fileSuffixChoices!: Array<String> = Array<String>()
        )
    }

文档保存选项。

系统能力:SystemCapability.FileManagement.UserFileService

名称 类型 必填 说明
newFileNames Array 拉起documentPicker进行保存的文件名,若无此参数,则默认需要用户自行输入。
defaultFilePathUri String 指定保存的文件或者目录路径。
fileSuffixChoices Array 保存文件的后缀类型。

struct AudioSelectOptions

public struct AudioSelectOptions {
   public AudioSelectOptions()
}

音频选择选项,目前不支持参数配置。

系统能力:SystemCapability.FileManagement.UserFileService

struct AudioSaveOptions

public struct AudioSaveOptions {
        public AudioSaveOptions (
            public var newFileNames!: Array<String> = Array<String>()
        )
    }

音频的保存选项。

系统能力:SystemCapability.FileManagement.UserFileService

名称 类型 必填 说明
newFileNames Array 拉起audioPicker进行保存音频资源的文件名,若无此参数,则默认需要用户自行输入。

如对您有帮助,帮忙点个“在看 、关注” 让更多的人受益~!

技术交流群可加wx“LB-9191”备注cangjie

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐