更新记录

1.2.9(2026-09-02)

  • 修复 recent-photo.etsRecentPhotoInfo 等从 @ohos.file.RecentPhotoComponent 导入,避免 @kit.MediaLibraryKit 未再导出导致 ArkTS 编译失败。

1.2.8(2026-09-02)

  • 修复已知问题。

1.2.7(2026-09-01)

  • 修复已知问题。
查看更多

平台兼容性

uni-app x(4.83)

Chrome Safari Android iOS 鸿蒙 微信小程序
× × × × ×

其他

多语言 暗黑模式 宽屏模式
× ×

umi-secure-controls

鸿蒙安全控件 / 嵌入式选择与视觉控件,仅支持 App 鸿蒙端(HBuilderX 4.61+)。

摇树(按需打包)

package.json 已开启 uni_modules.treeShaking.app.harmony = true

  • 模板里用到的 umi-* 组件(easycom)才会进入产物
  • 各组件通过相对路径引用自己的原生实现,互不拖带
  • 业务侧请按需 import API / 类型,例如只 import { umiScanStart },不要一次性导入未使用的符号
// 推荐:按需
import { umiScanStart, UmiScanError } from "@/uni_modules/umi-secure-controls"

// 不推荐:无意义的整包导入习惯(命名空间式)会削弱摇树效果

安全按钮

标签 鸿蒙控件 说明
umi-save SaveButton 点击后临时授权写入媒体库
umi-paste PasteButton 点击后临时授权读取剪贴板,事件中带回文本
umi-location LocationButton 点击后临时授权定位并返回经纬度。API 15 废弃,API 20 已删除
<umi-save class="btn" text="saveToGallery" buttonType="capsule" @click="onSave"></umi-save>
<umi-paste class="btn" text="paste" buttonType="capsule" @click=""></umi-paste>
<umi-location class="btn" text="currentLocation" buttonType="capsule" @click="onLocation"></umi-location>

通用属性:icontextbuttonTypecapsule | circle | normal),创建后不可动态修改。建议按钮尺寸不小于约 220×40,且不要被其他组件遮挡。

umi-save 另支持鸿蒙 SaveButton API 20+ 属性(官方文档):

属性 说明
setIcon 自定义图标,传鸿蒙 Resource 路径字符串,如 app.media.startIcon
setText 自定义文案(string),或以 app.string.xxx 形式的 Resource 路径
iconSize 图标尺寸:number(vp)或 { width?, height? }

setIcon / setText 需在工程 harmony-configs 声明受限权限 ohos.permission.CUSTOMIZE_SAVE_BUTTON(需应用市场上架审批),否则自定义不生效、仍显示默认样式。

嵌入式组件

标签 鸿蒙控件 说明
umi-photo-picker PhotoPickerComponent 嵌入式图片/视频选择,无需申请媒体权限
umi-album-picker AlbumPickerComponent 相册列表,需与 umi-photo-picker 配合
umi-recent-photo RecentPhotoComponent 显示最近一张图片/视频
umi-card-recognition CardRecognition 卡证识别(身份证、银行卡等)
umi-doc-scanner DocumentScanner 文档扫描,输出 JPG / PDF / Excel

相册 + 图片选择

<umi-album-picker :options="albumOptions" @albumClick="onAlbumClick"></umi-album-picker>
<umi-photo-picker ref="photoPicker" :options="pickerOptions" @select=""></umi-photo-picker>

UmiPickerOptions 对应鸿蒙 PickerOptions + BaseSelectOptions(含 MIMEType、选择上限、拍照/搜索/编辑/原图、预选、推荐、勾选框颜色、单行模式等)。

umi-photo-picker 方法:setAlbumUrisetDatasetMaxSelectedsetPhotoBrowserItemsetPhotoBrowserUIElementVisibilityexitPhotoBrowser

相册点击后调用 setAlbumUri(uri) 刷新宫格。selectOnItemClick 默认 true,对应 onItemClicked 的返回值。

最近图片

<umi-recent-photo :options="{ period: 86400, MIMEType: 'imageVideo', photoSource: 'all' }"
    @recentPhotoClick="onRecent"></umi-recent-photo>

grantOnClick 默认 true,点击后授予该 URI 读权限。

卡证识别

属性对应鸿蒙 CardRecognitionsupportTypecardSidecardRecognitionConfigdefaultShootingModeisPhotoSelectionSupportedsetCardMargins、银行卡弹窗、身份证人像/质量检测)。

<umi-card-recognition supportType="id" cardSide="default"
    defaultShootingMode="manual" :isPhotoSelectionSupported="true"
    @result="onCardResult"></umi-card-recognition>

supportTypeauto | id | bank | passport | driverLicense | vehicleLicense
cardSidedefault | front | back

文档扫描

属性对应鸿蒙 DocumentScannerConfigmaxShotCountsupportTypeisGallerySupportededitTabsdefaultFilterIddefaultShootingModeisShareablesaveOptionsoriginalUris

<umi-doc-scanner :maxShotCount="3" :supportType="['doc','sheet']"
    :saveOptions="['jpg','pdf']" @result="onScanResult"></umi-doc-scanner>

拉起式 Picker

系统半模态选择器,也可当组件点击拉起。同时导出同名 API,可直接 import 调用。

标签 / API 鸿蒙能力 说明
umi-image-picker / umiImagePickerSelect PhotoPickerComponent 全屏弹窗内嵌图库选择图片/视频
umi-file-picker / umiFilePickerSelect umiFilePickerSave DocumentViewPicker 选择或保存文档
umi-audio-picker / umiAudioPickerSelect umiAudioPickerSave AudioViewPicker 选择或保存音频
umi-camera / umiCameraPick cameraPicker 拉起系统相机拍照/录像
umi-contact-picker / umiContactPickerSelect contact.selectContacts 拉起联系人选择
umi-scan / umiScanStart scanBarcode.startScanForResult 默认界面扫码
umi-cast AVCastPicker 投播入口;组件内会自动创建/销毁 AVSession,点击右侧系统投播图标拉起设备列表
<umi-image-picker :options="pickerOptions" @success="onImage" @fail="onFail">
    <text>选择图片</text>
</umi-image-picker>
<umi-file-picker :maxSelectNumber="5" selectMode="file" @success="onFiles"></umi-file-picker>
<umi-camera cameraPosition="back" :mediaTypes="['photo','video']" @success="onCamera"></umi-camera>
<umi-scan :scanTypes="['qr']" :enableAlbum="true" @success="onScan"></umi-scan>
<umi-cast pickerStyle="panel" sessionType="video" @stateChange="onCast"></umi-cast>
import {
    umiImagePickerSelect,
    UmiImagePickerOptions,
    UmiSelectMode,
    UmiReminderMode,
    UmiPickerColorMode,
    UmiItemDisplayRatio
} from "@/uni_modules/umi-secure-controls"

const pickerOptions : UmiImagePickerOptions = {
    MIMEType: 'image',
    maxSelectNumber: 9,
    isPhotoTakingSupported: true,
    isSearchSupported: true,
    selectMode: UmiSelectMode.MULTI_SELECT,
    checkBoxColor: '#FF007AFF',
    maxSelectedReminderMode: UmiReminderMode.TOAST,
    uiComponentColorMode: UmiPickerColorMode.AUTO,
    singleLineConfig: {
        itemDisplayRatio: UmiItemDisplayRatio.SQUARE_RATIO,
        itemBorderRadius: 8,
        itemGap: 4
    },
    completeButtonText: 'done'
}

umiImagePickerSelect(pickerOptions).then((res) => {
    const uris = res.photoUris
})

UmiImagePickerOptions 对应鸿蒙 PhotoPickerComponent / PickerOptions(与嵌入式 umi-photo-picker 字段一致)。枚举与官方一致:UmiSelectModeUmiReminderModeUmiPickerColorModeUmiItemDisplayRatio,单行模式使用 singleLineConfigUmiSingleLineConfig)。另含 completeButtonText(弹窗顶栏确认文案:done | send | add)。

文件选择支持 selectModefile | folder | mixed)、fileSuffixFiltersauthModemergeMode 等 DocumentSelectOptions 字段;保存走 mode="save"umiFilePickerSave

相机支持 cameraPositionmediaTypessaveUrivideoDuration。扫码支持 scanTypesenableMultiModeenableAlbum

扫码失败时 @fail / umiScanStartreject 返回 UmiScanError{ code, message }code 为鸿蒙 BusinessError.code。用户取消时 message 通常为 The user canceled the barcode scanning.,可按 code 或文案自行分支。

权限说明

鸿蒙权限需在工程 harmony-configs 中声明(不会随插件自动写入)。请直接参考本仓库示例项目的配置,按业务裁剪后放到你自己的工程:

文件 作用
harmony-configs/entry/src/main/module.json5 requestPermissions 权限声明
harmony-configs/entry/src/main/resources/*/element/string.json 权限用途文案(reason

组件与权限对照

能力 是否需在 module.json5 声明 说明
umi-save 否* SaveButton 点击后临时授权写媒体库;自定义 setIcon/setText 另需受限权限 CUSTOMIZE_SAVE_BUTTON
umi-paste PasteButton 点击后临时授权读剪贴板
umi-location APPROXIMATELY_LOCATION + LOCATION(成对),组件内会动态申请
umi-photo-picker / umi-album-picker / umi-recent-photo 系统嵌入式选择器,免媒体读权限
umi-image-picker 弹窗内嵌 PhotoPickerComponent,免媒体读权限
umi-file-picker / umi-audio-picker / umi-contact-picker 系统拉起式 Picker,由系统界面授权
umi-camera / umi-scan / umi-card-recognition / umi-doc-scanner 一般否* 走系统相机/扫码/视觉界面;若上架审核要求声明相机,请自行补充 ohos.permission.CAMERA
umi-cast 投播依赖本机 AVSession,同网发现设备

* 示例工程当前未声明相机权限;若你方业务强依赖相机且审核要求声明,再在示例配置基础上追加。

示例工程已配置的定位权限

module.json5 中关键片段(完整内容见示例文件):

"requestPermissions": [
  { "name": "ohos.permission.INTERNET" },
  {
    "name": "ohos.permission.APPROXIMATELY_LOCATION",
    "reason": "$string:permission_approximately_location_reason",
    "usedScene": {
      "abilities": ["EntryAbility"],
      "when": "inuse"
    }
  },
  {
    "name": "ohos.permission.LOCATION",
    "reason": "$string:permission_location_reason",
    "usedScene": {
      "abilities": ["EntryAbility"],
      "when": "inuse"
    }
  }
]

对应中文用途文案(resources/zh_CN/element/string.json):

  • permission_approximately_location_reason:用于在用户点击定位按钮后获取大致位置
  • permission_location_reason:用于在用户点击定位按钮后获取精确位置

注意: 精确位置与模糊位置必须成对声明;仅改 unpackage 下产物无效,需写在项目根目录 harmony-configs,重新运行后才会进包。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

使用 umi-location 时需在工程 harmony-configs 声明 ohos.permission.APPROXIMATELY_LOCATION 与 ohos.permission.LOCATION(成对);umi-save 自定义 setIcon/setText 需受限权限 ohos.permission.CUSTOMIZE_SAVE_BUTTON;配置方式见示例项目与 readme;Save/Paste 等安全控件为点击临时授权,嵌入式/拉起式系统 Picker 通常无需额外媒体读权限

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率: