更新记录

1.0.0(2026-11-13)

  • 新增视频与实况素材选取、原生可视化选段、封面选择和预览源码。
  • 新增 Android 动态壁纸服务、系统确认与状态查询源码。
  • 新增 iOS 实况候选导出、相册保存核验与系统设置指引源码。
  • 新增双宿主示例、任务取消、资源释放与完整脱敏报告。
  • 新增原生全屏素材、桌面和锁屏模拟预览,内置喜欢、保存、分享、设置及可扩展操作栏。
  • 新增预览文案、主题、按钮顺序/显隐/禁用配置,支持运行时更新和宿主动作结果回传。
  • 新增统一尺寸线宽的内置图标,以及普通态、选中态、工具位和桌面图标地址配置、异步加载回退与错误事件。
  • 新增 Android 视频相册保存与 iOS 普通视频保存,保留实况原件及真实保存回执。
  • 新增自定义全屏示例、业务喜欢本地持久化与完整持续事件诊断。
  • 新增参考式黑底视频选段界面、黄色双端胶片时间轴、白色封面游标与气泡、片段平移及长视频浏览。
  • 新增全屏预览画面左右滑动切换锁屏/桌面,并让编辑器右上“预览”直接进入同一正式预览界面;视频选段保持当前区间循环。
  • 新增编辑器右上全屏选段效果预览,支持素材、桌面和锁屏模拟,返回继续编辑、使用片段后保持原有编辑结果合同。
  • 修复 iOS 编辑时间轴的手势方法缺少 override 导致云打包 Swift 编译失败,保留横向拖动和长按选段判断。
  • 修复 iOS 选段效果预览的文字测量浮点常量类型歧义,保留按钮宽度、多行高度测量与原有布局。
  • 修复双宿主示例导出回执携带选段时清空候选、修改时间后继续使用旧候选的问题,预览、保存和设置自动生成当前选段。
  • 修复示例连续请求的任务编号及卸载清理,导出失败或取消后终止后续系统交接。
  • 修复 iOS 保存成功后指引等待触发超时误报,及时返回相册回执与手动设置阶段。
  • 修复 Android 预览静音状态、系统设置界面启动异常和已销毁编辑器的缩略图释放。
  • 修复 Android 全屏长短操作文案混排时的图标错位、模式按钮高度不齐及自定义模式文案重复追加“预览”。
  • 修复 Android 编辑器旋转后的预览高度,以及长日期、应用标签和底部操作栏的构图重叠。
  • 修复 Android 窄屏大字号的长标题与操作区互遮,分别支持完整文案滚动和明确滚动提示。
  • 修复 Android 编辑器退到后台后延迟加载回调重新播放的问题,返回时保留用户的播放或暂停选择。
  • 修复 Android 编辑器大字号标签与控制行裁切,播放按钮跟随实际播放意图更新,增强未选滑轨的可辨识性。
  • 修复 Android 非方形视频缩略图被拉伸的问题,使用等比居中裁剪并保留异步资源释放。
  • 修复 Android 保存源文件失效时的模糊提示,返回可识别的读取错误并保留原生原因及媒体库回滚。
  • 修复 Android 壁纸组件查询受限时误判未生效并清理素材造成黑屏的问题,保留未知状态及素材,并通过当前非预览服务的真实首帧核验生效状态。
  • 修复 Android 连续设置与中断重试时的素材交接、迟到回执匹配及临时副本并发清理,取消新候选时保留原有壁纸。
  • 修复 Windows Web 复制报告时系统转换换行造成正文长度不一致,完整报告与分段在生成时固定换行并避免拆开 CRLF。
  • 修复 uni-app x 示例折叠按钮嵌套 text 导致 iOS 原生组件警告,标题与展开状态改用按钮直接文本并保留完整点击区域。
  • 优化 Android 自定义文字色对比、操作按压反馈、喜欢选中状态及无障碍名称。
  • 优化 Android 与 iOS 全屏预览,按照新参考图常驻返回、锁屏预览/桌面预览分段器和渐变应用按钮,默认直接进入锁屏,保留显式素材模式和自定义动作。
  • 优化顶部锁屏/桌面分段按钮,清除系统默认蓝色背景与高亮着色,保留白色选中胶囊和深色文字。
  • 优化 20 秒以上视频的选段拖动与视口边界,允许把固定长度窗口移动到完整视频的任意时间段;iOS 低版本应用失败时提供“保存到相册 / 知道了”真实降级。
  • 优化视频时间轴的窗口化浏览与手势冲突处理,普通横向拖动连续浏览源视频,选段整体移动改为长按后拖动,并保留已加载缩略帧减少滑动黑屏。
  • 优化全屏桌面图标、两模式页点与贴底磨砂 Dock 的比例,锁屏按锁图标、日期、大号时间排列,并按真实安全区避让导航。
  • 优化 Android 保存成功面板的自适应高度、对齐、中文核验说明与设置指引点击区域。
  • 优化 Android 默认桌面图标与标签的对应关系,以及锁屏默认日期的中文星期。
  • 优化双端全屏桌面和锁屏构图,使用完整彩色应用图形、独立Dock与真实安全区,进入仿真默认沉浸,操作层显隐不挤压壁纸布局。
  • 优化双宿主示例为视频壁纸、实况壁纸和界面设置三个分类,提供素材类型校验、清晰主操作和按需展开的精确参数,保留全部诊断、分段复制及手动回退入口。
  • 调整默认全屏操作为喜欢、保存、预览、分享和设置,预览动作打开桌面/锁屏选择;保留客户动作配置与系统真实回执。
  • 优化 Android 封面选帧交互,松手后保留所选帧,便于确认封面。
  • 优化宿主兼容声明,明确uni-app Vue2/Vue3与uni-app x普通/蒸汽模式的接入和验收范围。
  • 优化客户说明的配置、参数和业务模块示例,补充双宿主示例的中文注释并保留生成结果。

平台兼容性

uni-app(5.34)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
√ √ × × √ - √ √ ×
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × × × × × × × × ×

uni-app x(5.34)

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

其他

多语言 暗黑模式 宽屏模式 蒸汽模式
× × × √

动态壁纸与实况制作 UTS 插件

介绍

lizhao-wallpaper 为 uni-app Vue2/Vue3、uni-app x 普通模式(VDOM)和蒸汽模式(Vapor)提供视频与实况制作、原生全屏桌面/锁屏预览、喜欢、相册保存、分享及 Android/iOS 壁纸系统交接。当前为开发候选源码,匹配基座与真机效果需要按文末范围验收。

功能特色

功能 用途 对应 API
系统素材选择 选取视频或所支持的实况原件,创建本插件持有的临时资源 chooseWallpaperMedia
可视化编辑 胶片时间轴双端选段、封面定位、区间循环与确认前全屏效果预览 openWallpaperEditor
素材导出 Android 生成视频片段,iOS 生成图片与 MOV 配对候选 exportWallpaper
原生全屏预览 真实媒体播放,切换素材、桌面与锁屏模拟,查看画面构图 previewWallpaper 的 ui.preview
可配置界面 文案、主题、按钮顺序/显隐/禁用及普通/选中态图标地址 previewWallpaper 的 ui、updateWallpaperPreview
喜欢与业务操作 默认本地切换,或通过事件交给业务处理并回传结果 onEvent、resolveWallpaperPreviewAction
内置保存与分享 原生相册保存、成功反馈面板及系统文件分享 ui.actions、ui.saveFeedback、ui.share
系统壁纸交接 Android 系统预览确认,iOS 相册保存与设置指引 applyWallpaper
相册与状态 Android 保存视频,iOS 保存视频或实况,查询平台可观测状态 saveWallpaperToAlbum、getWallpaperState
任务及诊断 取消任务、释放临时素材、收集完整本地脱敏报告 cancelWallpaperTask、releaseWallpaperResources、getWallpaperDiagnostics

适合哪些场景

场景 推荐路径 使用边界
短视频壁纸制作 选择、编辑、导出、预览、设置 平台编解码能力和系统选择器决定最终可用范围
iPhone 已有实况 选择实况、预览、保存或设置指引 原始实况保留配对原件,系统判断锁屏动态资格
iPhone 视频生成实况 选择视频、短片段导出、保存并在系统设置 候选可在相册识别后继续核验锁屏播放
Android 实况素材 选择所支持的 Motion Photo,使用真实视频表示 厂商私有实况格式可能不被当前解析器支持
壁纸商城详情 全屏预览、喜欢、保存、分享与自定义业务按钮 账号、支付或服务器收藏由接入方通过host操作处理
故障复现 操作后复制示例底部完整报告 报告含环境来源、插件诊断和会话轨迹,默认仅本地保留

下载与导入

宿主 示例代码位置
uni-app uni_modules/lizhao-wallpaper/example/uniapp/index.vue
uni-app x uni_modules/lizhao-wallpaper/example/uniappx/index.uvue

从基础到进阶:按业务模块使用

基础功能配置示例

导入、注册与宿主选择

  1. 将整个 uni_modules/lizhao-wallpaper/ 导入工程,保留 uni_modules/lizhao-wallpaper/utssdk/、uni_modules/lizhao-wallpaper/example/ 与 uni_modules/lizhao-wallpaper/static/。无需安装另一套实况或视频编辑插件。
  2. uni-app Vue2、Vue3 注册 uni_modules/lizhao-wallpaper/example/uniapp/index.vue,页面代码使用 JavaScript;uni-app x 注册 uni_modules/lizhao-wallpaper/example/uniappx/index.uvue,页面代码使用 UTS。
  3. uni-app x 普通模式与蒸汽模式共用同一个 .uvue 示例、根 import 和 API。蒸汽模式在项目根 manifest.json 的 uni-app-x 节点设置 vapor: true;普通模式设为 false。只修改该字段,保留项目其他配置。
  4. 按第8节配置原生构建并制作匹配自定义基座。新增插件后仅更新页面资源不能补入 Swift/Kotlin 与系统服务。

以下是 pages.json 的单个路由条目,应加入现有 pages 数组,保留原来的启动页。uni-app x 使用下面的路径;uni-app 将路径中的 uniappx 改为 uniapp,路由都不写文件后缀。

{
  // 完整页面文件为uni_modules/lizhao-wallpaper/example/uniappx/index.uvue。
  "path": "uni_modules/lizhao-wallpaper/example/uniappx/index",
  "style": { "navigationBarTitleText": "动态壁纸与实况制作" }
}

最小流程:选择并预览视频

以下 JavaScript 函数适用于 uni-app Vue2/Vue3 的页面脚本,可由按钮调用。先检测能力,预览关闭或失败后释放本次资源。uni-app x 的类型写法及完整页面见本节后文。

import { getWallpaperCapabilities, chooseWallpaperMedia, previewWallpaper } from '@/uni_modules/lizhao-wallpaper'

import { releaseWallpaperResources } from '@/uni_modules/lizhao-wallpaper'

export function chooseAndPreview() {
  // 能力来自当前运行端;Web/小程序没有壁纸业务能力,不能仅凭页面可打开就调用成功。
  const capabilities = getWallpaperCapabilities()
  if (!capabilities.chooseVideo || !capabilities.preview) {
    console.warn(capabilities.reason)
    return
  }
  chooseWallpaperMedia({
    // 默认也是video;原始实况用live-photo,后续仍使用返回的resourceId。
    mediaType: 'video',
    success(result) {
      if (result.media == null) return
      const resourceId = result.media.resourceId
      previewWallpaper({
        resourceId,
        // 最小示例只展示素材。完整下载/分享界面见后文,需保留资源并等待其子任务结束。
        ui: { preview: { initialMode: 'media' }, actions: [] },
        // preview-closed只表示预览关闭;相册实况识别和锁屏动态资格须分别核对。
        success(preview) { console.log(preview.state, preview.message) },
        fail(error) { console.error(error.errSubject, error.errCode, error.errMsg) },
        complete() {
          // complete在成功或失败后均执行,此时预览已不再占用素材;仅释放本次选择的资源。
          releaseWallpaperResources({ resourceIds: [resourceId],
            fail(error) { console.error('资源释放失败', error.errCode, error.errMsg) } })
        }
      })
    },
    // 9358003是用户取消,仍需保留该真实结果;不要提示“已选取”。
    fail(error) { console.error(error.errSubject, error.errCode, error.errMsg) },
    complete(outcome) { console.log('选择结束', outcome.requestId, outcome.success) }
  })
}

mediaType 默认为 video。选择已有实况时传 live-photo,后续使用本次返回的 resourceId。该标识只在当前进程和本插件资源表中有效,应用重启后重新选择。

高级示例

视频选段与封面

前置数据是 chooseWallpaperMedia 成功返回的当前进程 resourceId。下面分别演示原生可视化编辑和手动参数导出,其他辅助函数用于保存、状态与清理。手动示例选取输入视频的 0–2000ms,封面为输入视频的 1000ms,要求输入至少长2000ms。Android 选段长度为 500–30000ms,iOS 为 500–3000ms,全部时间必须落在真实媒体时长内。

原生编辑器采用黑色背景和大幅视频画面。拖动胶片两端的黄色把手调整起止,普通横向拖动胶片浏览完整视频;如需整体移动片段,请长按选区后再拖动,长视频可连续浏览到视频末尾。白色封面框及“封面”气泡用于定位封面,封面始终位于所选区间内。底部“已选取 x.x s”只对显示值取一位小数,返回参数仍保留实际毫秒。

极短选段的把手与封面靠近时,可长按胶片选区后拖动,整体移动片段并保留时长与封面相对位置。无障碍也可分别调节起点、终点与封面。

视频下方的“预览”用于循环播放当前区间,再点暂停,播放不会改变封面。右上玫红“预览”进入当前选段的全屏效果界面,可切换素材、桌面和锁屏模拟;返回编辑会保留选段与封面。只有点“使用此片段”才返回 state=edited 及 result.edit,查看效果和返回编辑不会提前触发编辑成功回调。退出整个编辑器按原取消错误 9358003 返回。

横屏编辑时,视频居中完整显示,播放/暂停叠在画面上,Android声音开关也放在画面内;已选时长位于底部全宽胶片时间轴上方。大字号或小窗口允许工具区滚动,保持按钮与完整文案可达。

编辑器右上角“预览”直接复用正式全屏预览界面,按当前选段循环播放;左右滑动可在锁屏预览与桌面预览之间切换,返回编辑会保留选段与封面,不生成文件,也不代表 iOS 已生成配对实况或系统已经接受壁纸。需要保存、分享或设置时,先将确认得到的 result.edit 传给 exportWallpaper,再使用导出返回的新 resourceId。Android 可在编辑器切换静音;iOS 当前视频候选保持静音。

import {
  openWallpaperEditor, exportWallpaper, cancelWallpaperTask,
  releaseWallpaperResources, saveWallpaperToAlbum, getWallpaperState,
  getWallpaperDiagnostics
} from '@/uni_modules/lizhao-wallpaper'

export function editAndExport(resourceId) {
  // 返回编辑任务编号。预览内点“使用此片段”后result.edit才有参数,取消通过fail返回9358003。
  return openWallpaperEditor({
    resourceId,
    success(result) {
      if (result.edit == null) return
      // 编辑器不直接生成文件;使用返回的绝对毫秒和静音选择,继续调用正式导出API。
      exportWallpaper({
        resourceId,
        startMs: result.edit.startMs,
        endMs: result.edit.endMs,
        coverTimeMs: result.edit.coverTimeMs,
        muted: result.edit.muted,
        // output.media.resourceId是新候选。接入方同时登记原素材和候选,结束后分别释放。
        success(output) { console.log(JSON.stringify(output)) },
        fail(error) { console.error(error.errCode, error.errMsg) }
      })
    },
    fail(error) { console.error(error.errCode, error.errMsg) }
  })
}
export function exportSpecifiedRange(resourceId) {
  // 封面必须满足startMs <= coverTimeMs < endMs。iOS视频候选仅支持muted=true。
  return exportWallpaper({ resourceId, startMs: 0, endMs: 2000, coverTimeMs: 1000, muted: true,
    success(result) { console.log(JSON.stringify(result)) },
    fail(error) { console.error(error.errCode, error.errMsg) } })
}
export function cancelCurrent(taskId) {
  // taskId使用当前在途API立即返回的编号,不能误用resourceId;取消请求不代表原任务已经结束。
  cancelWallpaperTask({ taskId, success(result) { console.log(result.state) },
    fail(error) { console.error(error.errCode, error.errMsg) } })
}
export function saveLivePhoto(resourceId) {
  // 先查询saveToAlbum。Android保存资源的视频,iOS保存普通视频或完整实况原件。
  // verified表示读取回资产并核对类型;iOS实况还检查photoLive,锁屏资格仍需单独核对。
  saveWallpaperToAlbum({ resourceId, success(result) { console.log(result.assetId, result.albumVerification) },
    fail(error) { console.error(error.errCode, error.errMsg) } })
}
export function queryState(resourceId) {
  // 省略resourceId时查询系统状态;传入时进一步核对该素材是否与当前壁纸匹配。
  getWallpaperState({ resourceId, success(result) { console.log(result.wallpaperVerification, result.target) },
    fail(error) { console.error(error.errCode, error.errMsg) } })
}
export function releaseOwned(resourceIds) {
  // 仅传本会话取得的资源ID。仍被导出/预览引用时会返回9358008,等待结束后重试。
  releaseWallpaperResources({ resourceIds, success(result) { console.log(result.releasedCount) },
    fail(error) { console.error(error.errCode, error.errMsg) } })
}
// 同步返回已脱敏的JSON文本;示例完整报告还会合并运行环境和所有保留的操作日志。
export function diagnostics() { return getWallpaperDiagnostics() }

iOS 视频生成候选默认静音,muted=false 返回明确的不支持错误。已有实况的导出仅保留完整原件,调用时省略三个时间参数。预览、导出和系统交接正在引用的资源暂不能释放,结束后按实际回执释放。相册提交或系统应用进入不可撤销阶段后,取消请求可能返回结果未知,原任务最终回执仍需保留。

原始实况与相册保存

iOS 选择 mediaType: 'live-photo' 后使用原件资源预览、保存或设置指引。需要显式调用 exportWallpaper 时仅传 resourceId 和回调,省略 startMs、endMs、coverTimeMs,原始实况保留完整配对和音轨。Android 的同名选择路径支持带标准 XMP 视频长度信息的 JPEG Motion Photo,其预览、导出与相册保存使用视频表示。

保存前检查 getWallpaperCapabilities().saveToAlbum。保存成功后分别记录 assetId 与 albumVerification,失败时保留 9358004/9358009 的原始错误;结果未知时先核对相册再重试。相册资产是系统副本,之后释放插件临时资源不删除该资产。

全屏界面、按钮配置与业务接管

下面的 uni-app Vue2/Vue3 函数接收已有的 resourceId。两个图标参数可直接传空字符串使用默认图标,也可以传开发者准备的可访问图片地址。下载按钮保存当前素材到系统相册,视频编辑后的预览应传入导出候选编号。

import { previewWallpaper, resolveWallpaperPreviewAction, updateWallpaperPreview,
  cancelWallpaperTask } from '@/uni_modules/lizhao-wallpaper'

export function openFullScreen(resourceId, normalIconUrl = '', selectedIconUrl = '') {
  // 此示例用本地存储演示业务接管。接入账号收藏时,可在服务器确认后再回传最终状态。
  const storageKey = 'wallpaper-like-' + resourceId
  let initialLiked = false
  try { initialLiked = uni.getStorageSync(storageKey) === true }
  catch (error) { console.warn('读取喜欢状态失败', error) }
  return previewWallpaper({
    resourceId, liked: initialLiked, actionTimeoutMs: 60000,
    ui: {
      appearance: { accentColor: '#FF5C8A', contentMode: 'cover' },
      preview: { initialMode: 'lock', showModeSwitcher: true },
      texts: { title: '我的壁纸', guideButton: '查看设置方法' },
      // 数组决定按钮顺序。visible控制显隐,enabled保留按钮并显示禁用状态。
      // 传actions: []可隐藏整个动作栏,关闭入口始终可用。
      actions: [
        { id: 'like', handler: 'host', label: '喜欢', selectedLabel: '已喜欢',
          icon: 'heart', iconUrl: normalIconUrl, selectedIconUrl },
        { id: 'download', label: '下载', icon: 'download' },
        { id: 'share', visible: true, icon: 'share' },
        { id: 'apply', label: '设置', icon: 'wallpaper' },
        // 自定义id必须交给host处理,最多6项。超过4个可见动作会自动收入更多菜单。
        { id: 'show-lock', label: '看锁屏', icon: 'eye', handler: 'host' }
      ],
      saveFeedback: { enabled: true, showGuide: true },
      share: { content: 'video', title: '分享壁纸', text: '' }
    },
    onEvent(event) {
      // 保存/分享结果和图标失败都从持续事件取得,保持完整错误码与请求关联编号。
      console.log('预览事件', JSON.stringify(event))
      if (event.event !== 'action' || !event.pending) return
      if (event.action === 'like') {
        const nextLiked = !event.liked
        try { uni.setStorageSync(storageKey, nextLiked) }
        catch (error) {
          resolveWallpaperPreviewAction({ previewId: event.requestId,
            actionId: event.actionId, succeeded: false, message: '喜欢状态保存失败',
            fail(failure) { console.error(failure.errCode, failure.errMsg) } })
          return
        }
        // 先完成实际业务,再通知插件切换图标和文字。actionId只用于本次点击。
        resolveWallpaperPreviewAction({ previewId: event.requestId,
          actionId: event.actionId, succeeded: true, liked: nextLiked,
          fail(error) { console.error(error.errCode, error.errMsg) } })
      } else if (event.action === 'show-lock') {
        // 待业务动作完成后再更新模式,避免在忙碌时替换正在等待回执的按钮。
        resolveWallpaperPreviewAction({ previewId: event.requestId,
          actionId: event.actionId, succeeded: true,
          success() {
            updateWallpaperPreview({ previewId: event.requestId, mode: 'lock',
              fail(error) { console.error(error.errCode, error.errMsg) } })
          },
          fail(error) { console.error(error.errCode, error.errMsg) }
        })
      }
    },
    success(result) { console.log('预览关闭', result.state) },
    fail(error) { console.error(error.errSubject, error.errCode, error.errMsg) },
    complete(outcome) {
      // 此时预览会话结束。资源由调用方统一管理,继续使用时保留,使用结束后释放。
      console.log('预览结束', outcome.requestId, outcome.success)
    }
  })
}

export function closeFullScreen(previewId) {
  // previewId来自openFullScreen的返回值。取消走原预览fail(9358003)和complete。
  cancelWallpaperTask({ taskId: previewId,
    fail(error) { console.error(error.errCode, error.errMsg) } })
}

默认 like 使用 handler: 'native',状态保留在当前预览会话,通过 like-change 事件供业务持久化。使用 handler: 'host' 时必须提供 onEvent 并完成对应 actionId。超时解除忙碌,迟到或重复回传返回9358001。

uni-app x 使用同一配置结构,完整带中文注释的强类型用法已放入 uni_modules/lizhao-wallpaper/example/uniappx/index.uvue 的 configuredPreviewUI 和 onPreviewEvent。其中还演示配置面板、图标输入、喜欢持久化及实时切换锁屏。uni-app 对应完整实现为 uni_modules/lizhao-wallpaper/example/uniapp/index.vue。

uni-app x 的 UTS 调用

普通模式和蒸汽模式都可使用下面的强类型函数,完整页面为 uni_modules/lizhao-wallpaper/example/uniappx/index.uvue。参数、回调和资源编号与前面的 JavaScript 相同。

import {
  exportWallpaper, WallpaperResult, WallpaperFail, ExportWallpaperOptions
} from '@/uni_modules/lizhao-wallpaper'

function exportVideoInUts(resourceId: string): string {
  // 所有时间均为输入视频绝对毫秒;前置素材必须至少有2000ms。
  const options: ExportWallpaperOptions = {
    resourceId: resourceId, startMs: 0, endMs: 2000, coverTimeMs: 1000, muted: true,
    success: (result: WallpaperResult): void => {
      // 只有导出成功才会得到新候选,记住其resourceId供预览/交接和后续释放。
      if (result.media != null) console.log('候选编号', result.media!.resourceId)
    },
    fail: (error: WallpaperFail): void => {
      // 保留主题、错误码和阶段,完整原生错误链可从底部报告复制。
      console.error(error.errSubject, error.errCode, error.stage, error.errMsg)
    }
  }
  // 立即返回请求编号,不是导出文件路径;需要取消时将此编号传给cancelWallpaperTask。
  return exportWallpaper(options)
}

完整示例

选择、编辑、导出与系统交接

下面串联选择、编辑、导出与系统交接。complete 表示本次插件调用结束,系统实际壁纸状态在结果字段中单独提供。iOS 完成保存和指引后仍需要在系统中选择并确认。

import {
  chooseWallpaperMedia, openWallpaperEditor, exportWallpaper,
  applyWallpaper, releaseWallpaperResources
} from '@/uni_modules/lizhao-wallpaper'

export function makeWallpaper() {
  // 资源由本次业务链独立持有,不能释放其他页面或会话的资源。
  const owned = []
  const logFailure = error => console.error(error.errSubject, error.errCode, error.errMsg)
  const release = () => {
    // 清理失败只记录错误,不递归调用release,避免繁忙资源形成无限重试。
    if (owned.length > 0) releaseWallpaperResources({ resourceIds: owned, fail: logFailure })
  }
  const fail = error => { logFailure(error); release() }
  chooseWallpaperMedia({ mediaType: 'video', fail,
    success(selection) {
      if (selection.media == null) return
      const source = selection.media.resourceId
      owned.push(source)
      // 编辑返回参数,原视频仍保留,取消时走统一fail和清理。
      openWallpaperEditor({ resourceId: source, fail,
        success(edited) {
          if (edited.edit == null) return
          exportWallpaper({ resourceId: source,
            startMs: edited.edit.startMs, endMs: edited.edit.endMs,
            coverTimeMs: edited.edit.coverTimeMs, muted: edited.edit.muted, fail,
            success(output) {
              if (output.media == null) return
              if (!owned.includes(output.media.resourceId)) owned.push(output.media.resourceId)
              // Android打开系统确认页;iOS保存实况并给出指引,用户仍需手动完成系统设置。
              applyWallpaper({ resourceId: output.media.resourceId, fail: logFailure,
                success(result) {
                  // 不把success等同壁纸生效。iOS通常是requires-user-action及unknown。
                  console.log(result.state, result.albumVerification, result.wallpaperVerification)
                },
                complete(outcome) {
                  console.log('系统交接调用结束', outcome.success)
                  // 系统交接完成后清理临时文件;Android服务保留独立的生产副本。
                  release()
                }
              })
            }
          })
        }
      })
    }
  })
}

页面生命周期还应取消未完成任务并在可释放时清理素材。可运行页面及其资源清理、失败处理和日志复制流程位于 uni_modules/lizhao-wallpaper/example/uniapp/index.vue 与 uni_modules/lizhao-wallpaper/example/uniappx/index.uvue。

完整页面的预览、保存和设置按钮会先核对当前原素材与选段参数,视频缺少匹配候选时自动导出,再继续目标操作。重新编辑或修改毫秒参数后会重新生成。导出失败、取消或页面卸载会终止后续操作,原始实况可直接进入预览、保存或系统交接。

接入自有页面时,在编辑成功后传入 result.edit,在导出成功后记录 result.media.resourceId。导出结果同时包含 media 与 edit,其中 edit 记录本次输入选段,应保留新候选供后续调用。连续请求需要同时维护当前任务编号,并按各自的 complete 回执结束状态。

示例区域 能力 检查方式
视频壁纸 选择视频、调整选段与封面、全屏预览、相册保存和设置 先选择视频,再点全屏预览;精确毫秒参数和单独生成在更多功能中
实况壁纸 选择原始实况、预览、保存与设置,保留完整原件 使用实况素材,页面不显示视频选段操作
界面设置 开启自定义、标题/主题色、分享显隐、喜欢处理方式与图标地址 选择素材后预览当前配置;关闭自定义即使用插件默认界面
更多功能 状态查询、资源释放 查询可观测状态;释放仅清理本页临时素材,保留相册和系统壁纸副本
底部运行记录 任务状态、取消、一键复制日志、完整报告、分段与手动复制 摘要可收起,完整记录仍保留;覆盖失败与实际剪贴板内容

切换分类保留已选择的素材和选段;当前素材类型与分类不匹配时需要重新选择,避免误用上一分类的资源。任务进行中分类暂不可切换,可用“取消当前任务”结束操作。视频导出成功后自动继续预览、保存或设置,不必先手动点击生成。

API 用途速查

API 用途 返回
getWallpaperCapabilities 查询当前平台真实实现和能力 WallpaperCapabilities
chooseWallpaperMedia 单选视频或支持的实况 请求编号,结果 selected
openWallpaperEditor 原生视频选段与封面编辑 请求编号,结果 edited
exportWallpaper 导出视频片段或实况候选 请求编号,结果 candidate-created
previewWallpaper 原生预览,关闭后完成 请求编号,结果 preview-closed
updateWallpaperPreview 更新仍打开的预览模式、喜欢状态或完整UI配置 独立请求编号,结果 preview-updated
resolveWallpaperPreviewAction 回传host操作成功/失败及喜欢状态 独立请求编号,结果 action-resolved
saveWallpaperToAlbum Android视频、iOS视频或实况保存并核验 请求编号,结果 album-saved
applyWallpaper 系统壁纸交接或 iOS 保存与指引 请求编号及真实交接阶段
getWallpaperState 查询可观测的壁纸状态 请求编号,结果 active/inactive/unknown
cancelWallpaperTask 请求取消指定任务 请求编号,取消结果或明确错误
releaseWallpaperResources 释放本插件持有的临时文件 请求编号,实际释放数量
getWallpaperDiagnostics 读取脱敏诊断快照 JSON 字符串

参数、默认值与回调

各方法的参数对象对应 uni_modules/lizhao-wallpaper/utssdk/interface.uts,没有按宿主另起一套 API:

参数 类型 必填 说明 默认值 可选参数
chooseWallpaperMedia.options ChooseWallpaperMediaOptions / null 否 选择媒体,回调返回素材 null,选择视频 mediaType、success、fail、complete
openWallpaperEditor.options WallpaperResourceOptions 是 对当前视频进行可视化编辑,返回edit参数 无 success、fail、complete
exportWallpaper.options ExportWallpaperOptions 是 处理当前资源并返回新候选 无 startMs、endMs、coverTimeMs、muted及回调
previewWallpaper.options WallpaperResourceOptions 是 全屏预览指定资源,关闭后完成;沿用旧类型并增加可选配置 无 ui、liked、actionTimeoutMs、onEvent及一次性回调
updateWallpaperPreview.options UpdateWallpaperPreviewOptions 是 更新正在展示的预览 无 liked、mode、ui及回调
resolveWallpaperPreviewAction.options ResolveWallpaperPreviewActionOptions 是 完成指定host动作 无 liked、message及回调
saveWallpaperToAlbum.options WallpaperResourceOptions 是 按当前资源保存视频或完整实况 无 success、fail、complete
applyWallpaper.options WallpaperResourceOptions 是 指定素材进入系统交接 无 success、fail、complete
getWallpaperState.options GetWallpaperStateOptions / null 否 可指定素材进行身份核对 null,查询系统状态 resourceId、success、fail、complete
cancelWallpaperTask.options CancelWallpaperTaskOptions 是 指定原任务编号,取消请求另有编号 无 success、fail、complete
releaseWallpaperResources.options ReleaseWallpaperResourcesOptions 是 批量释放当前插件持有的资源 无 success、fail、complete

getWallpaperCapabilities() 和 getWallpaperDiagnostics() 不接收参数,分别同步返回能力对象与脱敏 JSON 文本。以上其他方法立即返回 string 类型的请求编号。参数字段含义如下:

参数 类型 必填 说明 默认值 可选参数
mediaType string 否 选择器媒体类型 video video、live-photo
resourceId string 除状态查询外必填 本插件当前进程持有的素材编号 状态查询可省略,其他无 由选择或导出结果取得
startMs number 否 视频输入绝对起点,单位毫秒 0 有限且非负
endMs number 否 视频输入绝对终点,单位毫秒 起点后最多 2000ms 需落在真实时长及平台范围内
coverTimeMs number 否 输入视频绝对封面时间,单位毫秒 片段中点 大于等于起点且小于终点
muted boolean 否 生成视频是否静音 true iOS 视频候选仅支持 true
taskId string 是 取消目标操作的请求编号 无 由异步方法立即返回
resourceIds string[] 是 批量释放的素材编号 无 非空,均须属于本插件
success function 否 本次操作成功回执 无 至多一次
fail function 否 真实错误及原生异常摘要 无 至多一次
complete function 否 本次调用终态,含 result/error 无 至多一次

所有异步方法立即返回请求编号,结果经回调派发。getWallpaperState(null) 查询当前系统状态。持续进度监听本阶段未提供,完整原生阶段可在诊断中查看。

success(result: WallpaperResult) 与 fail(error: WallpaperFail) 二选一,随后执行 complete(outcome: WallpaperComplete),每个回调至多一次。outcome.success 表示调用是否成功,outcome.result/outcome.error 分别为对应回执或null。回调中的异常被独立隔离,不阻止本次complete。取消请求的回调与原任务回调各自独立,接入方仍需等待原任务终态。全屏预览通过onEvent持续交付状态与动作,中途动作保留预览会话,一次性回调在该会话终态执行,事件监听随会话结束释放。

全屏预览配置

previewWallpaper 的新增字段均为可选项。其他使用 WallpaperResourceOptions 的API只读取各自业务参数。

参数 类型 必填 说明 默认值 可选参数
ui WallpaperPreviewUI 否 见下方分组,省略字段自动补默认值 内置界面 appearance、preview、texts、actions、icons、saveFeedback、share
liked boolean 否 本次预览初始喜欢状态 false true、false
actionTimeoutMs number 否 等待业务回传的超时,单位毫秒 60000 1000–300000整数
onEvent WallpaperPreviewEventCallback host操作时必填 持续接收界面、动作和图标结果 无 见事件表

主题、预览与图标

参数 类型 必填 说明 默认值 可选参数
ui.appearance.accentColor string 否 喜欢选中态与强调色 #FF5C8A #RRGGBB
ui.appearance.textColor string 否 前景文字与默认操作图标色;Android 控件优先保留配置色,对比不足时选中模式采用黑/白文字,深色承托上的文字与内置图标采用白色;外部图标图片不重着色 #FFFFFF #RRGGBB
ui.appearance.backgroundColor string 否 媒体未覆盖区域的背景色 #080A0F #RRGGBB
ui.appearance.contentMode string 否 媒体等比填充或等比适配 cover cover、contain
ui.appearance.showStatusBar boolean 否 是否显示系统状态栏 true true、false
ui.preview.initialMode WallpaperPreviewMode 否 初始显示模式;media保留纯素材预览 lock media、home、lock
ui.preview.showModeSwitcher boolean 否 显示导航栏锁屏预览/桌面预览分段器 true true、false
ui.preview.showPlaybackControl boolean 否 按需显示播放/暂停控制 false true、false
ui.preview.showHint boolean 否 按需显示媒体操作提示 false true、false
ui.preview.homeIconLabels string[] 否 桌面模拟标签,最多8项,每项最多12字符 信息、日历、相册、相机、地图、时钟、天气、股市 空数组隐藏网格
ui.preview.homeIconUrls string[] 否 与桌面标签逐项对应的图片地址,最多8项 [] 空项使用默认图标
ui.preview.dockIconUrls string[] 否 桌面底部Dock的4个图片地址 [] 最多4项,空项使用默认图标
ui.preview.lockShortcutIconUrls string[] 否 锁屏底部两侧快捷图片地址 [] 最多2项,空项使用默认图标
ui.preview.clockText string 否 模拟时钟文本,最多16字符 空,读取当前时间 自定义文本
ui.preview.dateText string 否 模拟日期文本,最多40字符 空,读取当前日期 自定义文本
ui.icons.close/play/pause/more/success/guide string 否 六个工具图标分别配置图片地址 各为空字符串 支持的地址见下文

默认操作栏图标采用24pt/dp画布、2pt/dp圆端线条和统一绘制风格,点击区域至少44pt/dp。桌面与Dock使用独立的完整彩色应用图形,Dock按电话、浏览器、联系人、音乐排列。自定义操作图标按固定容器等比适配,建议交付同一套24单位设计网格、相同线宽与留白的透明PNG;自定义桌面图标可使用完整的方形应用图形。

默认直接进入全屏锁屏预览:左上返回、居中“锁屏预览 / 桌面预览”分段器和右上渐变“应用”按钮常驻;在画面区域左右滑动可切换锁屏与桌面,实况资源进入后自动播放。锁屏按锁图标、日期、大号时间排列;桌面采用两排应用图标、贴底磨砂Dock,两个模式圆点与顶部选中状态同步。系统状态栏和底部手势条由设备提供,时间默认随可见界面更新;配置 clockText 或 dateText 时保留指定文本。页面仍是App内效果预览,实际应用保持系统确认或保存后手动设置流程。

显式配置额外动作、播放控件或操作提示时保留工具层,点按媒体可显示或收起,返回与顶部导航始终可用。initialMode: 'media' 和 updateWallpaperPreview({ mode: 'media', ... }) 继续支持纯素材模式,此时顶部两段均不选中;直接点击任一分段进入对应模拟模式。自定义动作、媒体播放与实况长按能力保持原合同。

所有图标地址最多2048个UTF-16字符,支持HTTP(S)、file://、应用可访问绝对路径以及 static/、/static/、_www/、_doc/、/uni_modules/ 资源前缀。具体图片由开发者准备。地址为空使用默认图标。优先使用PNG/JPEG,GIF取首帧,WebP以当前系统解码支持为准。SVG及无法解码的文件回退默认图标并触发 icon-error。

单张文件上限4MiB,源图单边上限4096像素,网络超时15秒。加载期间、失败、超限时均保留默认图标,更新配置会隔离旧请求,关闭界面释放加载任务。远程地址仍遵循宿主的ATS/网络安全配置,推荐HTTPS。

动作与保存分享

参数 类型 必填 说明 默认值 可选参数
ui.actions WallpaperPreviewAction[] 否 最多6项;apply位于右上导航,其余按数组顺序放入附加操作;空数组隐藏所有动作 应用(apply) 内置或宿主动作;窄屏、大字号或更多项时使用更多菜单
actions[].id string 是 唯一动作标识,字母开头、最多40字符 无 字母、数字、下划线、连字符
actions[].label string 否 普通文字,最多24字符 内置中文或自定义id 自定义文本
actions[].selectedLabel string 否 喜欢选中态文字,最多24字符 内置“已喜欢”,自定义label时沿用label 自定义文本
actions[].icon string 否 默认或加载失败时的统一图形 内置对应图形,自定义为more heart、download、share、wallpaper、eye、star、more
actions[].iconUrl string 否 自定义普通图标地址 空 同上方地址规则
actions[].selectedIconUrl string 否 喜欢选中态图标地址 空 空时沿用普通图标或内置选中态
actions[].visible boolean 否 隐藏后释放布局位置 true true、false
actions[].enabled boolean 否 禁用时保留可见状态 true true、false
actions[].handler string 否 原生处理或业务接管 内置native,自定义host native、host
ui.saveFeedback.enabled boolean 否 原生下载完成后展示保存面板 true true、false
ui.saveFeedback.showGuide boolean 否 保存面板显示设置帮助入口 true true、false
ui.share.content string 否 分享当前视频或当前可取得的图片+视频文件 video video、files
ui.share.title string 否 分享面板标题,最多80字符 分享壁纸 自定义文本
ui.share.text string 否 附带分享文本,最多2000字符 空 自定义文本

内置id为 like、download、share、apply、preview,其中preview打开桌面/锁屏选择,取消选择保留当前模式。原图模式可显式设置 initialMode: 'media' 或调用 updateWallpaperPreview;启用附加操作时也可在模式选择中返回原图。自定义id必须由host处理。系统分享的目标App决定如何接收文件,files 不保证对方将图片与视频识别为实况。Android回执 share-sheet-opened 表示已交接系统分享面板,iOS按系统完成回执返回 shared 或 share-cancelled。

界面文字

以下字段位于 ui.texts,均可选,类型均为string,长度按UTF-16字符计。空字符串用于隐藏对应自定义文字,必要的无障碍名称保留默认值。

参数 类型 必填 说明 默认值 可选参数
title、subtitle string 否 顶部标题和副标题,分别最多80/160字符 空 自定义文本
mediaTab、homeTab、lockTab string 否 模式按钮文字,每项最多80字符 原图、桌面预览、锁屏预览 自定义文本
videoHint、livePhotoHint string 否 操作提示,每项最多80字符,showHint开启后显示 点击画面显示或收起更多操作、长按播放实况 自定义文本
loadingText、savingText、sharingText string 否 忙碌提示,每项最多80字符 正在加载、正在保存、正在打开分享 自定义文本
saveSuccessTitle string 否 保存面板标题,最多80字符 已保存到相册 自定义文本
saveSuccessMessage string 否 保存面板附加说明,最多2000字符 空 保留实际保存结果
guideTitle、guideMessage string 否 帮助标题与正文,分别最多80/2000字符,非空正文替换默认步骤 设置动态壁纸、空时使用平台步骤 自定义文本
guideButton、doneButton、moreButton string 否 操作文字,每项最多80字符 查看设置方法、完成、更多 自定义文本
closeButton、playButton、pauseButton string 否 控件无障碍文字,每项最多80字符 关闭、播放、暂停 自定义文本

实时更新、业务回传与事件

参数 类型 必填 说明 默认值 可选参数
update.previewId string 是 正在打开的previewWallpaper请求编号 无 当前会话编号
update.liked boolean 否 同步喜欢状态 省略则保留 true、false
update.mode WallpaperPreviewMode 否 切换展示模式 省略则保留 media、home、lock
update.ui WallpaperPreviewUI 否 完整替换UI,未填字段使用默认值 省略则保留原配置 同上UI字段
resolve.previewId string 是 发出host动作的预览编号 无 event.requestId
resolve.actionId string 是 当前等待的点击编号 无 event.actionId
resolve.succeeded boolean 是 真实业务是否成功 无 true、false
resolve.liked boolean 否 成功后采用的最终喜欢状态 like成功时反转旧值,其他操作保留 true、false
resolve.message string 否 业务结果说明,最多2000字符 空 自定义文本
success、fail、complete function 否 更新或回传操作自身的一次性回调 无 与其他API相同

表中的update、resolve分别代表 updateWallpaperPreview、resolveWallpaperPreviewAction 的参数对象。更新期间有动作等待时返回9358008,已关闭或失效会话返回9358001。更新UI是完整替换,更新少量字段时建议由业务保存当前配置并合并后传入。控制请求返回自己的编号,原预览请求持续有效直到关闭。

事件字段 内容
event ready、mode-change、action、action-success、action-fail、like-change、icon-error
requestId、resourceId 原预览编号及当前素材编号
sequence 会话内从1递增的事件序号
actionId、action 动作唯一编号与id,普通非动作事件为空;图标错误action标识图标槽位
mode、liked、pending 当前模式、喜欢状态,以及是否存在未完成动作,原生动作也可处于pending
message 当前阶段的真实说明
result、error 可空的WallpaperResult与WallpaperFail,保留实际结果或错误

ready 表示媒体与控件就绪,mode-change 和 like-change 表示状态已改变。action 表示接受点击,每次接受的动作产生对应结果事件。icon-error 携带9358005及图标槽位,界面继续显示默认图标。仅host的action事件需要调用resolve,事件监听异常会被隔离并记录。预览关闭后停止新事件,释放监听随预览会话结束完成。

已提交的相册写入或系统分享可能在关闭预览后继续持有资源。完整流程应保留resourceId,释放返回9358008时等待后重试。两宿主完整示例在卸载时每秒重试忙碌释放,最多五分钟,期间的新候选会继续登记并清理,其他错误保留到诊断。最小纯预览示例关闭后即可按回执释放。

能力检测

WallpaperCapabilities 提供 platform、systemVersion 与 implementation/reason,以及 chooseVideo、chooseLivePhoto、exportCandidate、visualEditor、preview、saveToAlbum、systemWallpaperPicker、directApply 和 wallpaperEligibility。以实际布尔字段决定按钮和业务路径,不按 Vue2/Vue3 或 Vapor 名称推断系统能力。directApply=false 表示不能绕过系统确认;iOS 的锁屏素材资格仍为 unknown,旧系统可为 unsupported-os。

结果与生命周期

WallpaperResult 包含 operation、requestId、state、media、edit、target、assetId、albumVerification、wallpaperVerification、releasedCount 与 message。media 提供真实文件路径、字节数、时长、方向后的显示尺寸和来源。edit 提供起止、封面毫秒及静音选择。所有时间为毫秒。

结果字段 含义与可空范围
media 选择、编辑、导出时的素材;其他操作可为null。包含resourceId、kind、origin、imagePath、videoPath、durationMs、width、height、coverTimeMs、byteSize
media.kind/origin kind为video/live-photo;origin为selected-video/original-live-photo/video-generated
media.imagePath/coverTimeMs 普通视频可没有图片或封面时间,值为null;路径是当前进程临时文件,不应持久化为长期链接
edit 编辑确认和视频导出时包含输入素材的startMs、endMs、coverTimeMs和muted;导出同时返回新media,其他操作可为null
assetId 相册保存后的系统资产编号,未保存时为null
albumVerification not-requested、verified或unknown,不能用其推断锁屏资格
wallpaperVerification/target active/inactive/unknown;目标为home/lock/both/unknown,不可观测时保持unknown
releasedCount 实际释放数量;释放不包含系统相册资产或壁纸服务独立持有的生产文件

albumVerification=verified 表示读取回目标相册资产并核对输出类型,iOS实况还检查实况标记。权限或系统无法核实时返回 unknown。wallpaperVerification=active/inactive/unknown 表达实际可观测的壁纸状态。iOS 查询保持 unknown,保存与指引成功为 requires-user-action。Android 打开系统预览可能先返回 system-ui-opened,应按实际回执或后续查询核对。

Android 状态判断会同时核对系统组件查询与当前非预览壁纸服务的素材、生命周期和真实首帧。系统查询受到权限或可见性限制时,空结果保持 unknown,不会据此删除待确认素材;仅有历史保存记录或系统确认回执也不能证明视频已生效。当前服务确已渲染匹配素材后可返回 active。系统明确使用其他组件、或请求素材与当前已核验素材不同时返回 inactive。无法确认桌面或锁屏目标时,target 仍为 unknown,不由 active 推断为两者都已设置。

iOS 的 applyWallpaper 在获得相册保存回执、核验资产并展示设置指引后返回 requires-user-action,同时交付 assetId 和 albumVerification。用户可随后前往系统设置,指引窗口的“知道了”按钮只负责关闭窗口。iOS 16 及更低版本无法进入新的锁屏实况设置流程时,预览失败面板提供“保存到相册”和“知道了”,前者只有收到真实相册保存回执后才显示成功。已有窗口尚未关闭时,新交互请求可能返回 9358008,关闭后重试。无法展示指引窗口时,已取得的保存结果和文字操作指引仍通过成功回执提供。

取消完成、预览关闭、导出成功、相册保存与壁纸生效分别有独立含义。系统持有的壁纸生产文件与页面临时资源分别管理,资源释放以服务引用和返回结果为准。

错误码说明

统一 errSubject 为 lizhao-wallpaper,失败同时保留操作、请求、阶段和可采集的原生类型、原因及堆栈摘要。日志与复制前统一脱敏。

错误码 含义 处理建议
9358001 参数或资源标识无效 核对时间、资源拥有方和请求编号
9358002 当前平台或当前操作不支持 先查能力,按平台选择业务路径
9358003 用户或任务取消 保留取消结果,按需重新发起
9358004 所需权限未获得 检查真实授权状态后再操作
9358005 素材无法读取 重新选择,核对系统下载与可访问性
9358006 格式或实况配对不支持 使用完整原件和已支持的编码
9358007 导出、解码或编码失败 降低输入复杂度并保留诊断
9358008 交互或资源正在使用 等待当前任务结束,再编辑或释放
9358009 相册保存失败 核对权限、空间与原生回执
9358010 原生桥接或序列化失败 使用源码匹配的原生构建并复制报告
9358011 处理超时 记录素材摘要和阶段后重试
9358012 操作结果未知或无法撤销 先核对相册、系统壁纸或最终回执,避免直接重复提交
9358013 宿主接管操作返回失败 核对业务结果,使用新的actionId重新操作
9358014 系统分享调用失败 核对可分享素材及当前系统界面,保留原生错误

注意事项

宿主与渲染模式兼容性

宿主/渲染模式 Android iOS 页面与接入方式
uni-app Vue2,app-vue 支持 支持 uni_modules/lizhao-wallpaper/example/uniapp/index.vue,JavaScript根入口
uni-app Vue3,app-vue 支持 支持 同一个选项式示例和根入口,保***ue3卸载清理
uni-app x,普通模式VDOM 支持 支持 uni_modules/lizhao-wallpaper/example/uniappx/index.uvue,UTS根入口
uni-app x,蒸汽模式Vapor 支持 支持 同一个UTS示例与API,项目manifest的vapor=true

uni_modules/lizhao-wallpaper/package.json 的 Vue2、Vue3、app-vue、Android、iOS 与蒸汽模式声明为支持。该表描述已提供的源码接入范围,匹配基座及真实业务效果仍按下一节验收。普通模式和蒸汽模式必须分别构建,不能用其中一项推断另一项。配置方式参考 DCloud 蒸汽模式说明;插件目录和根入口遵循 DCloud UTS 插件规范。

app-nvue 的页面接入未单独验收,市场字段保留未声明。Harmony、Chrome/Safari Web、所有小程序与快应用没有壁纸业务实现,市场字段明确为不支持;调用进入不支持分支时返回9358002。Web示例和日志报告可以编译,不代表浏览器可以设置系统动态壁纸。暗黑模式、宽屏与多语言未提供专项适配,当前示例和原生交互文案为中文。

工具、系统与验收层级

本候选按 HBuilderX 5.34.0 及以上维护,当前本地验证使用5.34.2026102909,不承诺截图中4.84版本可用。Android最低API23,iOS素材选择与处理要求14+,新壁纸指引要求17+。不同厂商ROM、编解码器、系统壁纸交互和锁屏规则仍有设备差异。

资源构建、实际生成Kotlin/HX运行库联编、Swift语法及Foundation核心检查分别记录。Apple SDK完整SwiftCompile/链接、匹配基座运行、两端真实媒体/编辑UI/壁纸效果和实际剪贴板验收均待统一基座后完成。Vapor按工具规则跳过LSP,以真实构建交叉验证;静态检查和资源导出不能代替上述设备验收。

原生配置、权限与基座

配置位置 用途与接入要求
uni_modules/lizhao-wallpaper/utssdk/app-android/config.json 固定Media3仓储依赖与Android系统要求,构建时需要可访问对应仓库
uni_modules/lizhao-wallpaper/utssdk/app-android/AndroidManifest.xml 声明选择/编辑/预览页面、系统壁纸服务、BIND_WALLPAPER保护与查询项;保留插件原始声明
uni_modules/lizhao-wallpaper/utssdk/app-android/res/xml/lizhao_wallpaper.xml 系统动态壁纸元数据,随原生资源打入包
uni_modules/lizhao-wallpaper/utssdk/app-android/res/xml/lizhao_wallpaper_share_paths.xml 系统分享的专用只读文件范围
uni_modules/lizhao-wallpaper/utssdk/app-ios/config.json Swift混编所需系统框架及最低系统配置
uni_modules/lizhao-wallpaper/utssdk/app-ios/Info.plist 相册读取/保存的用途说明;保存核验按需申请真实照片库权限
uni_modules/lizhao-wallpaper/utssdk/app-ios/PrivacyInfo.xcprivacy 本地文件元数据读取理由;与实际原生实现一并交付

Android使用系统选择和确认,API23–28保存到相册时按需请求写入权限,API29+通过MediaStore提交。自定义远程图标使用网络权限,BIND_WALLPAPER由系统绑定服务。iOS的PHPicker与后续保存核验分别按系统机制授权,有限授权/拒绝时保留真实错误或unknown。原生配置由插件目录交付。

远程图标会向开发者配置的地址发起图片请求,接入方需保证地址与应用隐私说明一致。Android分享使用独立只读副本,保留24小时并在后续分享时清理过期副本,系统可按缓存策略更早回收。iOS分享期间持有资源引用,收到系统完成回执后释放。分享期间关闭预览会清理界面与等待中的业务动作,已提交的相册写入仍保留真实最终回执。

新增或修改 Swift/Kotlin、系统服务、Manifest、权限或原生配置后,需要重新原生联编或制作匹配自定义基座。appResource/WGT 不能更新旧基座内已经编译的原生实现。本轮按开发流程完成源码后再统一制作基座。

素材范围、资源与隐私

iOS 视频合成候选与原始实况的锁屏动态资格由系统判断。App 内预览、相册识别、系统动态选项和锁屏唤醒播放均应分别验证。低电量状态、素材运动和系统版本可能影响效果。原始实况保留配对原件,视频候选不包含原音轨。

原生全屏预览默认以等比填充显示真实视频或实况,可配置为等比适配。桌面与锁屏模式叠加示意图标、日期和时钟,配置只影响显示,导出素材沿用原选段参数。系统最终裁切和动态效果需要在系统预览及真机锁屏中核对。Android 预览继承当前素材的静音设置,编辑封面滑块松手后停留在所选帧,继续播放可使用编辑器播放按钮。

Android 在窄屏、横屏或大字号下分别滚动较长的标题和操作区域,保留完整文案及关闭/播放入口。模拟桌面与锁屏的装饰按剩余空间显示,无法完整容纳的图标行或日期会收起,不影响真实操作按钮。默认星期使用中文,自定义日期与图标配置保持原意。

applyWallpaper 的新系统指引要求 iOS 17+。iOS 14–16 会在申请照片权限或保存之前返回 9358002,仍可独立使用素材选择、预览、导出及 saveWallpaperToAlbum。

iOS 视频输入上限为 512MiB,显示尺寸单边上限为 4096 像素。当前进程最多持有 16 个素材、8 个任务,同时只执行一个重型导出。原生诊断最多保留 400 条及约 256KiB,发生容量淘汰会记录丢弃数量。照片库有限授权或资产不可读时,相册核验会说明实际范围。

uni_modules/lizhao-wallpaper/utssdk/app-ios/PrivacyInfo.xcprivacy 声明应用私有文件及用户所选文件的大小、元数据读取用途。原始媒体和诊断默认保留在本地,插件不进行追踪或自动上传。

Android 编辑使用固定版本的官方 Media3 仓储依赖,原生服务按可见性管理播放。文件操作仅作用于插件私有目录,系统相册原件和用户输入文件保留。不要把临时 resourceId 当作长期业务编号。完整原件和视频路径只在业务调用边界返回,诊断不保留明文路径或媒体内容。

Android 最低为 API 23,使用 androidx.media3:media3-transformer:1.8.0。单个素材最多 512MiB,输入视频最长一小时,临时素材最多 16 项。选段与封面时间使用整数毫秒。实况输入限具有标准 XMP 尾部视频长度信息的 JPEG Motion Photo,未知厂商容器明确返回格式错误。相册保存能力可通过 saveToAlbum 查询。

Android 的 active 需要当前非预览壁纸服务与已提交素材相符,并已有真实首帧证据;退到后台暂停不代表壁纸已被替换,服务销毁、换源或播放错误后会重新核验。Android 13 及以下的组件查询可能受权限限制,插件不为状态查询申请宽泛的应用列表权限;Android 14 及以上使用 Manifest 中的壁纸服务精确查询声明。不可观测时返回 unknown 并保留待确认素材,建议回到桌面后再查询,原生诊断区分查询受限与服务首帧证据。临时资源释放后,壁纸服务使用独立持久化副本。iOS 原始实况保留音轨,视频生成候选采用静音。

底部报告包含插件版本来源、源码标记、运行环境、可采集的编译器/运行时字段、完整操作日志与原生诊断。安装包 HX、基座身份及无法取得的信息明确为 unknown,可在云打包时补充构建证据。复制失败保留同一快照及分段序号,并显示可手动复制的原文。Windows Web 在生成快照时固定 CRLF 换行,正文长度与完整/分段复制使用同一份字符串,分段不拆开换行或表情字符。

作者系列 UTS 插件

以下系列清单由项目统一发布清单生成。具体能力和适用范围请查各插件详情页。

插件 能力方向 插件市场
lizhao-alipay-kit 支付宝授权登录、App 支付与脱敏诊断 查看插件
lizhao-app-keepalive 应用保活、唤醒、自愈与报告 查看插件
lizhao-apple-iap 苹果内购、交易恢复、订阅管理与服务端验签参考 查看插件
lizhao-apple-login 苹果授权登录、凭证状态与撤销监听 查看插件
lizhao-bg-audio 背景音频播放、队列、倍速与事件 查看插件
lizhao-ble BLE 扫描、连接、读写、通知与自动重连 查看插件
lizhao-call-kit 电话、短信、通讯录原生能力 查看插件
lizhao-camera-pro 原生相机、拍照录像、水印与媒体保存 查看插件
lizhao-cast-screen DLNA 投屏、AirPlay 路由入口 查看插件
lizhao-choose-file 原生文件选择、上传、进度与取消 查看插件
lizhao-device-id 设备标识、隐私策略与诊断 查看插件
lizhao-dingtalk 钉钉授权登录、内容分享与回执诊断 查看插件
lizhao-doc-corrector 文档扫描、矫正、增强与识别 查看插件
lizhao-douyin-kit 抖音授权登录、内容分享与回执诊断 查看插件
lizhao-emu-detect 模拟器环境检测、风险评分与证据 查看插件
lizhao-float-window 悬浮窗、画中画、权限与诊断 查看插件
lizhao-gallery-pro 相册媒体分页、筛选、缩略图与导出 查看插件
lizhao-google-login Google 授权登录、会话管理与脱敏诊断 查看插件
lizhao-hce-card NFC 虚拟卡、APDU 交互与 NDEF 标签模拟 查看插件
lizhao-health 健康数据授权、查询、统计与写入 查看插件
lizhao-http-server 本地 HTTP 服务、文件传输与实时通信 查看插件
lizhao-icon-pro SVG 图标组件、多主题与缓存 查看插件
lizhao-id-photo 证件照制作、尺寸换算、换底色与模板换装 查看插件
lizhao-img-eraser 图片去水印、局部修复与原生编辑器 查看插件
lizhao-live-activity 实时活动、系统胶囊与普通通知降级 查看插件
lizhao-live-photo 实况照片选取、展示预览与原件处理 查看插件
lizhao-map 高德地图、定位、地点搜索、路线规划与导航 查看插件
lizhao-meta Facebook 登录分享、应用事件与深链 查看插件
lizhao-nfc-pro NFC 标签读写、NDEF、IsoDep 与诊断 查看插件
lizhao-notify-pro 本地通知、点击动作、进度与定时提醒 查看插件
lizhao-novel-reader 原生小说阅读、仿真翻页与段落评论 查看插件
lizhao-office-view Office 与 PDF 文件预览、进度与缓存管理 查看插件
lizhao-pdf-pro PDF 阅读、签批、真实写回与页面处理 查看插件
lizhao-play-billing Google Play 商品购买、订阅、恢复与确认消耗 查看插件
lizhao-qq-share QQ 授权码登录、QQ 与 QQ 空间分享 查看插件
lizhao-qrcode 二维码生成、Logo 与样式配置、批量生成及导出 查看插件
lizhao-scan-pro 原生扫码、连续扫码、相册识别 查看插件
lizhao-serial-port 路径串口、USB 串口、多会话收发与诊断 查看插件
lizhao-share-plus 系统分享、远程文件下载后分享 查看插件
lizhao-smart-tts 系统 TTS、云端合成、听书方案 查看插件
lizhao-sqlite-pro 原生 SQLite、迁移、备份与诊断 查看插件
lizhao-sse-pro SSE、Line、JSONL 与 Raw 流式请求 查看插件
lizhao-tcp-pro TCP 客户端、服务端、多连接与诊断 查看插件
lizhao-usb-storage U 盘、移动硬盘文件浏览、读写与批量复制 查看插件
lizhao-video-editor 视频裁剪、压缩、取帧与 FFmpeg/FFprobe 查看插件
lizhao-video-feed 短视频上下滑、短剧选集与分页加载 查看插件
lizhao-video-player 原生视频播放器、清晰度与播放交互 查看插件
lizhao-video-thumb 视频封面、批量取帧与 Base64 返回 查看插件
lizhao-vpn-pro 企业 VPN、IKEv2、安全接入与脱敏诊断 查看插件
lizhao-wechat-kit 微信登录、分享、支付、小程序与客服 查看插件
lizhao-wecom 企业微信授权登录、内容分享与脱敏诊断 查看插件
lizhao-xhs-share 小红书图文视频分享与回执诊断 查看插件

隐私、权限声明

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

Android 使用系统文件选择、相册保存与动态壁纸确认,API23–28保存时按需申请写入权限,远程图标使用网络权限,服务由 BIND_WALLPAPER 保护。iOS保存按需请求照片库权限,系统分享由用户确认。

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

媒体在本地处理,按用户操作保存或分享。自定义远程图标仅请求配置的地址,诊断本地脱敏且不默认上传。喜欢状态由当前会话或接入方管理。

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

无

暂无用户评论。