更新记录

1.0.18(2026-07-31)

  • 修复 HarmonyOS 诊断结果对象使用字面量强转时触发 ArkTS 名义类型编译错误的问题,改为显式具体结果类并保持公开返回结构不变。
  • Harmony 真机已验证应用内悬浮窗打开、本地 ArkWeb 内容加载、控制器挂接和关闭链路;Android、iOS 逻辑未改。
  • Harmony 原生 UTS 已变化,升级后需要重新构建并安装匹配的 Harmony HAP 或自定义基座。

1.0.17(2026-07-31)

  • 强化声网/WebRTC 接入说明:调用 AgoraRTC.getDevices() 或创建音视频轨道前,必须在悬浮窗内容中配置 webMediaPermissions: ['camera', 'microphone']
  • 明确 Android 系统权限弹窗中点击允许不能替代插件的网页媒体白名单,并补充精确 HTTPS Origin、iframe allow 和五步排错清单。
  • 优化 uni-app 与 uni-app x 示例界面,按基础开关、尺寸交互、Web 与媒体、JSBridge、PiP、诊断和日志模块紧凑展示。
  • 本版本只调整客户文档、示例页面和发布元数据;已使用包含媒体原生能力的自定义基座时,不需要因本次升级重新制作 Android 自定义基座。

1.0.16(2026-07-31)

  • 修复 Android WebRTC/声网 Web SDK 创建麦克风轨道时缺少音频模式权限的问题,补充 MODIFY_AUDIO_SETTINGS 清单声明。
  • 修复拖拽、点击、内容事件和 H5 消息持续监听回调可能被提前释放的问题。
  • 完成 Android 新自定义基座真机回归:百度页面点击、滚动和输入正常,Origin 白名单与 JSBridge 双向连续消息通过。
  • 完成声网 Web SDK 摄像头与麦克风轨道真机创建、释放和 H5 → App 结果回传,两次连续测试均通过。
  • Android 全局悬浮、尺寸与位置、显隐置顶、权限诊断及 PiP 不支持时的明确降级保持正常。
查看更多

平台兼容性

uni-app(4.84)

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

uni-app x(4.84)

Chrome Safari Android iOS 鸿蒙 微信小程序

lizhao-float-window

lizhao-float-window 是面向 uni-app / uni-app x 的原生 UTS 悬浮窗与画中画插件。一个插件即可完成应用内悬浮、Android 跨应用全局悬浮、视频系统 PiP、H5 ↔ App 双向通信、自适应全屏、拖拽定位、权限引导和运行诊断。

如果你只需要一个简单悬浮按钮,可以从应用内小窗开始;如果要做客服、直播、业务面板或 H5 交互,再按本文顺序逐步启用增强能力。

功能特色

  • 一种 API,多种悬浮形态:支持 Android 全局悬浮,以及 Android、iOS、Harmony 应用内悬浮。
  • 内容不受业务页面限制:悬浮窗可承载远程 URL、本地 HTML 和业务 H5 面板。
  • 从悬浮球到自适应全屏:支持 small / medium / large / custom / fullscreen,全屏会随横竖屏或窗口尺寸变化自动适配。
  • 真实系统画中画:Android、Harmony 可让视频进入系统 PiP;Harmony 还支持网络、本地资源、应用沙箱视频、鉴权头、播放控制和 Home 自动进入。
  • H5 ↔ App 安全双向通信:Android WebView 与 Harmony ArkWeb 使用事件消息桥,保留中文、Emoji 和 requestId;远程 H5 使用精确 HTTPS Origin 白名单。
  • 远程 H5 媒体采集:Android 可按精确 HTTPS Origin 和资源类型授权摄像头、麦克风,兼容声网 Web SDK 等基于 WebView 媒体采集的页面。
  • 交互能力完整:支持拖拽、边缘吸附、位置记忆、坐标管理、显隐、置顶、内容切换和运行时大小切换。
  • 权限和故障可诊断:支持 Android 悬浮窗权限检测、系统设置页引导、运行状态和诊断报告,不用让客户盲猜失败原因。
  • 平台边界透明:不支持的平台返回明确错误,不伪造成功;业务可先读取能力矩阵再决定是否显示入口。

适用场景

场景 推荐能力 说明
悬浮球、快捷入口 inApp + small 不申请系统悬浮权限,适合先完成最小接入。
客服、营销、活动浮窗 openFloatWindow + URL/本地 HTML 内容可独立更新,也可通过消息桥和 App 业务联动。
跨应用工具窗 Android overlay 离开 App 后仍显示,需要用户授予“显示在其他应用上层”权限。
表单、看板、业务面板 fullscreen 自动铺满当前应用可用区域,无需换算 Android px、iOS pt、Harmony vp。
直播、课程、视频播放 enterPictureInPicture 网络 m3u8/mp4 或本地视频进入系统 PiP。
Home 自动小窗 preparePictureInPicture 预先准备媒体,用户按 Home 后由 Harmony 系统自动进入 PiP。
H5 业务协作 onH5Message + sendMessageToH5 订单、客服、播放器等 H5 面板可与 App 双向传递结构化事件。
声网/WebRTC 音视频页面 allowedOrigins + webMediaPermissions Android 显式授权可信 H5 的摄像头、麦克风请求。
售后排查 权限、状态与诊断 API 输出结构化权限、窗口和桥接状态,便于远程定位。

下载与接入

1. 下载插件

在插件市场页面选择“使用 HBuilderX 导入插件”,把插件导入目标项目。也可以下载插件包后,将完整目录放到:

项目根目录/
└─ uni_modules/
   └─ lizhao-float-window/

不要只复制 utssdk,也不要修改插件目录名,否则 import、静态资源和原生配置可能失效。

2. 使用自定义基座

这是 UTS 原生插件。首次安装、版本升级,或插件的 Android/iOS/Harmony 原生文件发生变化后,需要重新制作对应平台的自定义基座或原生包。只更新页面资源、WGT 或 appResource 不能替换已经编译进旧基座的原生逻辑。

如果只使用 Web/小程序降级能力,按平台支持表处理;不支持的能力会返回明确错误。

3. 声网/WebRTC 页面先配置网页媒体权限

声网/WebRTC 必配项: 只要悬浮 WebView 中的页面会调用 await AgoraRTC.getDevices()、创建摄像头轨道或创建麦克风轨道,就必须在本次 openFloatWindowcontent 中配置 webMediaPermissions。系统权限弹窗中点击“允许”只代表 Android 运行时权限已授予,不能替代插件的网页媒体白名单。

同时获取摄像头和麦克风时,推荐直接使用:

content: {
  type: 'url',
  value: 'https://rtc.example.com/room',
  allowedOrigins: ['https://rtc.example.com'],
  webMediaPermissions: ['camera', 'microphone']
}
  • AgoraRTC.getDevices() 默认可能同时触发摄像头和麦克风请求,因此不要只配置其中一项。
  • 远程页面必须使用 HTTPS,并把最终页面的精确 Origin 配到 allowedOrigins;这里只写协议、域名和可选端口,不写路径。
  • 如果声网页面位于 iframe 中,iframe 还必须配置 allow="camera; microphone"
  • 如果完全不配置 webMediaPermissions,插件会按安全默认值拒绝网页媒体请求,即使用户已经在系统弹窗中允许摄像头和麦克风。

完整代码和排错顺序见下方“远程 H5 使用摄像头和麦克风”。

4. 从插件根目录导入

import {
  getCapabilities,
  openFloatWindow,
  closeFloatWindow
} from '@/uni_modules/lizhao-float-window'

不要直接 import utssdk/index.uts 或某个平台目录。

先选择适合你的接入方式

需求 推荐模式 是否需要系统悬浮权限 建议起点
App 页面内显示悬浮按钮或面板 mode: 'inApp' 先运行下方最小示例
Android 离开 App 后仍显示 mode: 'overlay' 先检查权限,再打开全局悬浮
自动铺满当前应用可用窗口 sizePreset: 'fullscreen' inApp 不需要;Android overlay 需要 先用 inApp 验证布局
播放视频系统小窗 PiP API 不使用悬浮窗权限 先确认 capabilities.pip
H5 与 App 双向传递事件 消息桥 API 取决于悬浮模式 先用随插件提供的本地 H5
远程 H5 调用摄像头或麦克风 webMediaPermissions 取决于悬浮模式 先确认页面为 HTTPS 且 Origin 精确匹配

快速开始:从简单到复杂

第一步:读取当前平台能力

同一份业务可能运行在 Android、iOS、Harmony、Web 或小程序。建议先读取能力矩阵,再决定展示哪些入口:

import { getCapabilities } from '@/uni_modules/lizhao-float-window'

getCapabilities({
  success(res) {
    console.log('当前平台悬浮窗能力', res)
  },
  fail(err) {
    console.log('读取能力失败', err)
  }
})

第二步:打开最简单的应用内悬浮窗

应用内悬浮不要求 Android 系统悬浮窗权限,最适合验证插件是否安装和基座是否匹配:

import {
  openFloatWindow,
  closeFloatWindow
} from '@/uni_modules/lizhao-float-window'

openFloatWindow({
  mode: 'inApp',
  content: {
    type: 'localAsset',
    value: 'static/float-window-demo.html'
  },
  sizePreset: 'small',
  dragEnabled: true,
  edgeSnap: true,
  success(res) {
    console.log('应用内悬浮窗打开成功', res)
  },
  fail(err) {
    console.log('应用内悬浮窗打开失败', err)
  }
})

// 页面离开或业务结束时主动关闭。
// closeFloatWindow({})

第三步:打开 Android 全局悬浮窗

Android 全局悬浮会显示在其他应用上层。先检查权限;未开启时,再由用户点击操作进入系统设置页:

import {
  checkOverlayPermission,
  openOverlayPermissionSettings,
  openFloatWindow
} from '@/uni_modules/lizhao-float-window'

checkOverlayPermission({
  success(res) {
    if (!res.granted) {
      // 建议把设置页跳转放在客户明确点击的按钮事件中。
      openOverlayPermissionSettings({})
      return
    }

    openFloatWindow({
      mode: 'overlay',
      content: {
        type: 'url',
        value: 'https://www.dcloud.io'
      },
      sizePreset: 'medium',
      dragEnabled: true,
      edgeSnap: true,
      rememberPosition: true,
      keepInScreen: true,
      success(openRes) {
        console.log('Android 全局悬浮窗打开成功', openRes)
      },
      fail(err) {
        console.log('Android 全局悬浮窗打开失败', err)
      }
    })
  }
})

系统设置页只能由用户完成授权,插件不会静默开启权限。用户返回 App 后应再次调用 checkOverlayPermission,确认 granted=true 再打开全局悬浮窗。

第四步:切换为自适应全屏

自适应全屏已整合为正式的 fullscreen 尺寸预设。客户不需要读取屏幕尺寸或换算平台单位:

import { openFloatWindow } from '@/uni_modules/lizhao-float-window'

openFloatWindow({
  mode: 'inApp',
  content: {
    type: 'url',
    value: 'https://www.dcloud.io'
  },
  sizePreset: 'fullscreen',
  success(res) {
    console.log('自适应全屏打开成功', res)
  }
})

fullscreen 表示当前应用的安全可用窗口:Android、iOS、Harmony 会随横竖屏或窗口尺寸变化自动刷新;全屏时位置固定在左上角且不响应拖动。它不是覆盖系统状态栏、导航栏或刘海区域的“物理屏幕全屏”。

进阶使用

自适应全屏

widthheight 只接受数字,不支持 100%100vwrpx。自定义尺寸的原生单位因平台而异:

  • Android:物理像素 px
  • iOS:逻辑点 pt
  • Harmony:逻辑单位 vp

客户不需要自行换算这些单位。打开浮窗时使用 fullscreen 预设,插件会读取当前应用可用窗口,并避开系统安全区域:

import {
  openFloatWindow,
  setFloatWindowSizePreset
} from '@/uni_modules/lizhao-float-window'

openFloatWindow({
  mode: 'inApp',
  content: {
    type: 'localAsset',
    value: 'static/float-window-demo.html'
  },
  sizePreset: 'fullscreen',
  success(res) {
    console.log('自适应全屏浮窗打开成功', res)
  }
})

// 已打开的浮窗也可以直接切换;改回 medium 等普通预设即可退出全屏。
setFloatWindowSizePreset({
  preset: 'fullscreen',
  success(res) {
    console.log('已切换为自适应全屏', res)
  }
})

fullscreen 表示当前应用可用窗口,不承诺跨应用覆盖状态栏、导航栏或刘海区域。PiP 大小仍由操作系统管理,不受该预设影响。

切换浮窗大小

import { setFloatWindowSizePreset, setFloatWindowSize } from '@/uni_modules/lizhao-float-window'

// 使用预设尺寸快速切换为大窗。
setFloatWindowSizePreset({
  preset: 'large',
  success(res) {
    console.log('切换为 large 成功', res)
  }
})

// 使用 custom 尺寸适配自己的业务面板。
setFloatWindowSize({
  size: {
    width: 300,
    height: 180
  },
  success(res) {
    console.log('切换自定义尺寸成功', res)
  }
})

移动与查询位置

import { setPosition, getPosition } from '@/uni_modules/lizhao-float-window'

// 将悬浮窗移动到左上方业务安全区域。
setPosition({
  position: {
    x: 20,
    y: 120
  },
  success(res) {
    console.log('移动悬浮窗成功', res)
  }
})

// 查询当前位置,适合保存用户拖拽后的坐标。
getPosition({
  success(res) {
    console.log('当前悬浮窗坐标', res)
  }
})

开启边缘吸附与位置记忆

import { openFloatWindow, updateFloatWindow } from '@/uni_modules/lizhao-float-window'

// 打开时启用吸附和会话内位置记忆;用户拖动后关闭再打开,会优先恢复上次坐标。
openFloatWindow({
  mode: 'inApp',
  content: {
    type: 'localAsset',
    value: 'static/float-window-demo.html',
    isVideoStream: false
  },
  sizePreset: 'small',
  edgeSnap: true,
  rememberPosition: true,
  keepInScreen: true,
  edgePadding: 16,
  success(res) {
    console.log('增强悬浮窗打开成功', res)
  }
})

// 已打开后也可以动态切换行为配置,适合在设置页里控制用户偏好。
updateFloatWindow({
  edgeSnap: true,
  rememberPosition: true,
  keepInScreen: true,
  edgePadding: 16
})

监听拖拽与点击

import { onMove, onClick, offMove, offClick } from '@/uni_modules/lizhao-float-window'

// 监听拖拽坐标,业务可用于位置记忆或吸附逻辑。
onMove({
  listener(event) {
    console.log('悬浮窗移动', event.x, event.y)
  }
})

// 监听悬浮窗点击,适合打开业务页或展开面板。
onClick({
  listener(event) {
    console.log('悬浮窗点击', event)
  }
})

// 页面卸载时建议主动取消监听。
offMove({})
offClick({})

动态切换内容

import { setContent } from '@/uni_modules/lizhao-float-window'

// 将悬浮窗内容切换为本地 HTML。
setContent({
  content: {
    type: 'localAsset',
    value: 'static/float-window-demo.html',
    isVideoStream: false
  },
  success(res) {
    console.log('切换本地内容成功', res)
  }
})

H5 ↔ App 双向通信

当悬浮内容不仅要展示,还要提交订单、打开业务页、同步播放器状态或接收 App 数据时,可以启用消息桥。推荐先使用随插件提供的本地 H5 验证:

import {
  openFloatWindow,
  onH5Message,
  offH5Message,
  sendMessageToH5
} from '@/uni_modules/lizhao-float-window'

// 先订阅,再打开 H5,避免漏掉页面初始化消息。
onH5Message({
  listener(message) {
    console.log('App 收到 H5 消息', message)
  }
})

openFloatWindow({
  mode: 'inApp',
  content: {
    type: 'localAsset',
    value: 'uni_modules/lizhao-float-window/static/bridge-demo.html',
    bridgeName: 'LizhaoFloatWindow'
  },
  success() {
    sendMessageToH5({
      event: 'appGreeting',
      data: { text: '你好,H5' },
      requestId: 'req-app-001'
    })
  }
})

// 页面卸载时取消监听,避免重复订阅。
// offH5Message({})

H5 侧发送 JSON 字符串,并通过固定事件接收 App 消息:

window.LizhaoFloatWindow.postMessage(JSON.stringify({
  event: 'submitOrder',
  data: { orderNo: 'DEMO-001' },
  requestId: 'req-h5-001'
}))

window.addEventListener('lizhaoFloatWindowMessage', function (event) {
  console.log('H5 收到 App 消息', event.detail)
})

远程 H5 必须使用 HTTPS,并配置精确 Origin,例如 allowedOrigins: ['https://example.com']。不要使用通配符,不要把路径、Token 或账号写入 Origin 白名单。Android 与 Harmony 支持该消息桥;其他平台会返回明确不支持。

远程 H5 使用摄像头和麦克风

声网 Web SDK 最终仍通过 WebView 的网页媒体权限请求获取设备。只在项目 manifest.json 声明权限不够:Android 还需要 WebView 处理媒体请求、校验页面 Origin,并在运行时向用户申请摄像头或麦克风权限。本插件已在 Android 原生层完成这条链路。

如果页面会执行 await AgoraRTC.getDevices(),请直接按下面的完整配置打开悬浮窗。客户实测表明:系统摄像头、麦克风权限已经显示“允许”时,如果缺少 webMediaPermissions: ['camera', 'microphone'],网页设备枚举仍可能失败。

import { openFloatWindow } from '@/uni_modules/lizhao-float-window'

openFloatWindow({
  mode: 'inApp',
  content: {
    type: 'url',
    // 替换成你自己的声网 H5 页面,必须为 HTTPS。
    value: 'https://rtc.example.com/room',
    // 这里只写 scheme + host + 可选端口,不能写路径、查询、通配符或 Token。
    allowedOrigins: ['https://rtc.example.com'],
    webMediaPermissions: ['camera', 'microphone']
  },
  success(res) {
    console.log('音视频 H5 已打开', res)
  },
  fail(err) {
    console.log('音视频 H5 打开失败', err)
  }
})
  • webMediaPermissions 未配置或为空时,网页摄像头和麦克风请求全部拒绝;按最小权限原则也可以只配置 ['camera']['microphone']
  • AgoraRTC.getDevices()、同时创建摄像头和麦克风轨道时,应配置 ['camera', 'microphone'];只使用单一设备时才建议缩小为单项权限。
  • allowedOrigins 是正确字段名,不是 allowedOriginszhttps://example.com/ 会规范化为 https://example.com,普通路径、HTTP、通配符、查询或片段会返回配置错误 9015011
  • 媒体采集不要求配置 bridgeNamebridgeName 仅在 H5 还需要与 App 收发业务消息时添加。两项能力共享同一份可信 Origin。
  • Android System WebView 不支持消息桥或消息桥运行时注册失败时,插件会继续加载页面并在诊断中记录降级原因;非法 bridgeName 或非法 Origin 仍会明确失败,避免静默放宽安全边界。
  • H5 首次真正请求设备时,Android 会显示系统权限弹窗。用户拒绝、页面请求未知资源、Origin 不匹配或页面不是安全上下文时,插件不会伪造成功。
  • 页面嵌在 iframe 时,除了插件配置外,还要由父页面为 iframe 增加 allow="camera; microphone";否则浏览器策略仍可能阻止设备访问。
  • 当前只处理 WebView 的摄像头与麦克风媒体请求,不扩展 <input capture> 文件选择、屏幕共享或任意网页权限。
  • 修改插件原生文件或权限清单后必须重新制作并安装 Android 自定义基座。旧基座只更新 WGT/appResource 不会获得这项能力。

排错时按以下顺序检查:

  1. 本次 openFloatWindowcontent.webMediaPermissions 是否包含页面实际请求的 cameramicrophone
  2. allowedOrigins 是否与跳转后的最终 HTTPS Origin 完全一致。
  3. Android 项目权限和当前自定义基座是否已包含摄像头、录音及音频模式权限。
  4. 用户是否在系统权限管理中真正允许摄像头和麦克风;部分 Android 定制系统还需检查隐私保护开关。
  5. 页面是否处于安全上下文,以及 iframe 是否声明对应的 allow

视频进入系统画中画

网络 MP4 或 m3u8 可以使用同一入口。调用前建议先通过 getCapabilities 确认当前设备返回 pip: true

import { enterPictureInPicture } from '@/uni_modules/lizhao-float-window'

enterPictureInPicture({
  content: {
    type: 'url',
    value: 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/wap2appvsnative.mp4',
    isVideoStream: true
  },
  success(res) {
    console.log('进入系统画中画成功', res)
  },
  fail(err) {
    console.log('进入系统画中画失败', err)
  }
})

Android PiP 需要 Android 8.0 及以上,并且设备和宿主 Activity 都支持画中画。Harmony 使用系统 PiPWindowXComponent SurfaceAVPlayer,还支持本地 MP4、鉴权请求头、播放控制和 Home 自动进入。普通网页或非视频内容不会伪装成 PiP 成功。

Harmony 本地视频

import { enterPictureInPicture } from '@/uni_modules/lizhao-float-window'

// 播放随应用发布的 MP4;路径由 DCloud 运行时解析为 Harmony rawfile 资源。
enterPictureInPicture({
  content: {
    type: 'localAsset',
    value: 'uni_modules/lizhao-float-window/static/pip-test.mp4',
    isVideoStream: true
  },
  success(res) {
    console.log('本地资源进入画中画成功', res)
  },
  fail(err) {
    console.log('本地资源进入画中画失败', err)
  }
})

// 下载完成后的 tempFilePath 位于应用沙箱,可直接作为 localFile 播放。
uni.downloadFile({
  url: 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/wap2appvsnative.mp4',
  success(downloadRes) {
    if (downloadRes.statusCode !== 200) return
    enterPictureInPicture({
      content: {
        type: 'localFile',
        value: downloadRes.tempFilePath,
        isVideoStream: true
      },
      fail(err) {
        console.log('沙箱视频进入画中画失败', err)
      }
    })
  }
})

localFile 仅支持当前应用 files/cache/temp 沙箱内的普通 MP4 文件,不接受任意系统绝对路径、目录、符号链接或跨应用文件。随包视频应优先使用 localAsset

Harmony 鉴权网络媒体

import { enterPictureInPicture } from '@/uni_modules/lizhao-float-window'

// 请求头只交给原生 MediaSource,不会写入插件日志、事件或播放状态。
enterPictureInPicture({
  content: {
    type: 'url',
    value: 'https://example.com/protected.mp4',
    headers: {
      Authorization: 'Bearer <由业务安全获取的临时凭据>'
    },
    isVideoStream: true
  },
  fail(err) {
    console.log('鉴权媒体进入画中画失败', err)
  }
})

不要把长期 Token、密钥或生产凭据写死在页面、README 或仓库中。业务应从安全服务动态获取短期凭据,并在失效后重新请求。

uni-app 页面可直接传普通对象,uni-app x 可传 UTSJSONObject;插件会在 Harmony 层统一读取并校验请求头。网络媒体首帧受地址、CDN 和设备网络影响,随插件提供的两套示例会等待最多 120 秒再解除按钮锁定,但插件仍以真实 success / fail / complete 回调作为最终结果。

Home 自动进入系统 PiP

import {
  preparePictureInPicture,
  cancelPictureInPicturePreparation
} from '@/uni_modules/lizhao-float-window'

// 先准备媒体但不立即弹出 PiP;用户按 Home 后由 Harmony 系统自动进入。
preparePictureInPicture({
  content: {
    type: 'localAsset',
    value: 'uni_modules/lizhao-float-window/static/pip-test.mp4',
    isVideoStream: true
  },
  startPositionMs: 1000,
  loop: true,
  progressIntervalMs: 500,
  autoEnterOnHome: true,
  success(state) {
    console.log('PiP 已准备,可按 Home 验证', state)
  },
  fail(err) {
    console.log('准备 PiP 失败', err)
  }
})

// 页面离开或业务取消时,释放尚未进入 PiP 的准备态。
cancelPictureInPicturePreparation({
  success(state) {
    console.log('已取消 PiP 准备', state)
  }
})

播放控制、跳转和状态查询

import {
  playPictureInPicture,
  pausePictureInPicture,
  seekPictureInPicture,
  getPictureInPicturePlaybackState,
  exitPictureInPicture
} from '@/uni_modules/lizhao-float-window'

// 恢复播放。
playPictureInPicture({ success: state => console.log('播放状态', state) })

// 暂停播放。
pausePictureInPicture({ success: state => console.log('暂停状态', state) })

// 点播媒体跳转到 10 秒;直播流 seekable=false 时会返回明确失败。
seekPictureInPicture({
  positionMs: 10000,
  success: state => console.log('跳转后状态', state),
  fail: err => console.log('跳转失败', err)
})

// 查询统一播放快照,返回值不包含完整媒体地址或请求头。
getPictureInPicturePlaybackState({
  success: state => console.log('当前播放状态', state)
})

// 退出时统一释放播放器、PiPController、Surface 和媒体文件描述符。
exitPictureInPicture({
  success: res => console.log('退出画中画成功', res)
})

权限与诊断

import {
  checkOverlayPermission,
  openOverlayPermissionSettings,
  getFloatWindowState,
  getFloatWindowDiagnostics
} from '@/uni_modules/lizhao-float-window'

// Android 全局悬浮前建议先检查权限,未授权时再引导用户打开设置页。
checkOverlayPermission({
  success(res) {
    console.log('悬浮窗权限状态', res)
    if (res.requiresOverlayPermission && !res.granted && res.canOpenSettings) {
      openOverlayPermissionSettings({})
    }
  }
})

// 查询当前运行态,适合保存位置或判断是否需要重复打开。
getFloatWindowState({
  success(res) {
    console.log('悬浮窗运行状态', res)
  }
})

// 导出诊断报告,适合售后排查权限、WebView、窗口附着和监听器状态。
getFloatWindowDiagnostics({
  success(res) {
    console.log('悬浮窗诊断报告', res)
  }
})

完整示例

示例 路径 说明
uni-app 演示页面 uni_modules/lizhao-float-window/example/uniapp/floatWindow.vue 覆盖全局悬浮、应用内悬浮、尺寸、拖拽、内容切换及完整 PiP 控制。
uni-app x 演示页面 uni_modules/lizhao-float-window/example/uniappx/index.uvue 与 uni-app 示例保持同等按钮和真实调用路径。
本地 HTML 内容 static/float-window-demo.html 用于演示 localAsset 内容加载。
双向通信 H5 uni_modules/lizhao-float-window/static/bridge-demo.html 演示 H5 发消息、接收 App 固定事件和安全日志渲染。
本地 PiP 视频 uni_modules/lizhao-float-window/static/pip-test.mp4 用于 Harmony localAsset MP4 回归。

API 列表

API 说明
getCapabilities(options) 获取当前平台能力矩阵。
openFloatWindow(options) / open(options) 打开悬浮窗。
updateFloatWindow(options) / setConfig(options) 更新悬浮窗配置。
closeFloatWindow(options) / close(options) 关闭悬浮窗。
showFloatWindow(options) / show(options) 显示悬浮窗。
hideFloatWindow(options) / hide(options) 隐藏悬浮窗。
bringFloatWindowToFront(options) / toFront(options) 将悬浮窗置顶。
setFloatWindowPosition(options) / setPosition(options) 设置悬浮窗坐标。
getFloatWindowPosition(options) / getPosition(options) 查询悬浮窗坐标。
setFloatWindowSize(options) / setSize(options) 设置自定义尺寸。
setFloatWindowSizePreset(options) 设置预设尺寸。
setFloatWindowDragEnabled(options) / setDragEnable(options) 开启或关闭拖拽。
setFloatWindowContent(options) / setContent(options) 更新悬浮窗内容。
enterPictureInPicture(options) 进入画中画。
preparePictureInPicture(options) Harmony 预准备系统 PiP,并支持按 Home 自动进入。
cancelPictureInPicturePreparation(options) 取消尚未进入的 Harmony PiP 准备态。
playPictureInPicture(options) 播放或恢复 Harmony PiP 媒体。
pausePictureInPicture(options) 暂停 Harmony PiP 媒体。
seekPictureInPicture(options) 跳转 Harmony PiP 点播媒体。
getPictureInPicturePlaybackState(options) 获取 Harmony PiP 统一播放状态。
exitPictureInPicture(options) 退出画中画。
checkOverlayPermission(options) 检查 Android 系统悬浮窗权限。
openOverlayPermissionSettings(options) 打开 Android 系统悬浮窗权限设置页。
getFloatWindowState(options) 获取当前悬浮窗运行态快照。
getFloatWindowDiagnostics(options) 获取权限、窗口、WebView 和监听器诊断报告。
onMove(options) / offMove(options) 订阅/取消拖拽事件。
onClick(options) / offClick(options) 订阅/取消点击事件。
onContentEvent(options) / offContentEvent(options) 订阅/取消内容事件。
sendMessageToH5(options) App 向当前可信且已就绪的 H5 页面发送事件消息。
onH5Message(options) / offH5Message(options) 订阅/取消 H5 发往 App 的业务消息。

sendMessageToH5(options)

说明 向已启用桥、已完成页面加载且仍处于白名单范围的 H5 页面发送事件消息。单条序列化后消息最大 256 KB。

支持平台 App-Android / App-Harmony;其他平台返回明确不支持。

参数

参数 类型 必填 说明 默认值 可选参数
options SendMessageToH5Options 发送参数对象 event / data / requestId / success / fail / complete
options.event string 非空业务事件名
options.data any 可 JSON 序列化的业务数据 null
options.requestId string 请求关联标识
options.success function 原生派发成功回调
options.fail function 配置、页面状态、大小或派发失败回调
options.complete function 完成回调,成功或失败都会触发

返回值

字段 类型 说明
delivered boolean 原生层是否已完成派发
bytes number JSON 消息 UTF-8 字节数
targetOrigin string | null 派发时页面范围;Android 为精确 Origin

onH5Message(options)

说明 订阅 H5 通过 window.<bridgeName>.postMessage(JSON字符串) 发来的合法业务消息。重复订阅会替换旧监听器。

参数

参数 类型 必填 说明 默认值 可选参数
options OnH5MessageOptions 监听参数对象 listener / success / fail / complete
options.listener function H5 消息监听器;传空可清除
options.success function 监听状态更新成功回调
options.fail function 平台不支持或参数失败回调
options.complete function 完成回调

监听事件包含 eventdatarequestIdsourceOriginisMainFrametimestamp。Harmony 的 isMainFramenull

offH5Message(options)

说明 取消 H5 业务消息监听;未监听时重复调用也会安全完成。

参数

参数 类型 必填 说明 默认值 可选参数
options FloatWindowBaseOptions 回调对象 success / fail / complete

preparePictureInPicture(options)

说明 在 Harmony 预准备媒体和 PiPController。autoEnterOnHometrue 时,用户按 Home 后由系统自动进入 PiP;该方法本身不会立即弹出 PiP。

支持平台 App-Harmony;Android、iOS、Web 和小程序返回明确不支持。

参数

参数 类型 必填 说明 默认值 可选参数
options PreparePictureInPictureOptions PiP 预准备参数对象 content / startPositionMs / loop / progressIntervalMs / autoEnterOnHome / success / fail / complete
options.content FloatWindowContent 网络、本地资源或应用沙箱媒体 type / value / headers / isVideoStream
options.startPositionMs number 点播起播位置,单位毫秒 0 >= 0
options.loop boolean 点播媒体是否循环播放 false true / false
options.progressIntervalMs number 点播进度事件间隔,单位毫秒 1000 250-5000
options.autoEnterOnHome boolean 按 Home 时是否由系统自动进入 PiP true true / false
options.success function 准备成功回调,返回播放状态快照
options.fail function 参数、媒体或系统能力校验失败回调
options.complete function 完成回调,成功或失败都会触发

返回值 无同步返回值;success 返回 PictureInPicturePlaybackState

cancelPictureInPicturePreparation(options)

说明 取消尚未进入系统 PiP 的准备态并释放媒体资源。PiP 已活动时应调用 exitPictureInPicture

支持平台 App-Harmony;其他平台返回明确不支持。

参数

参数 类型 必填 说明 默认值 可选参数
options PictureInPicturePlaybackOptions 取消准备回调对象 success / fail / complete
options.success function 取消成功回调,返回释放后的状态快照
options.fail function 取消失败回调
options.complete function 完成回调,成功或失败都会触发

返回值 无同步返回值;success 返回 PictureInPicturePlaybackState

playPictureInPicture(options)

说明 播放或恢复已经准备的 Harmony PiP 媒体。

参数

参数 类型 必填 说明 默认值 可选参数
options PictureInPicturePlaybackOptions 播放控制回调对象 success / fail / complete
options.success function 播放成功回调,返回最新状态
options.fail function 未准备或播放失败回调
options.complete function 完成回调,成功或失败都会触发

返回值 无同步返回值;success 返回 PictureInPicturePlaybackState。仅 App-Harmony 支持真实控制。

pausePictureInPicture(options)

说明 暂停已经准备的 Harmony PiP 媒体。

参数

参数 类型 必填 说明 默认值 可选参数
options PictureInPicturePlaybackOptions 暂停控制回调对象 success / fail / complete
options.success function 暂停成功回调,返回最新状态
options.fail function 未准备或暂停失败回调
options.complete function 完成回调,成功或失败都会触发

返回值 无同步返回值;success 返回 PictureInPicturePlaybackState。仅 App-Harmony 支持真实控制。

seekPictureInPicture(options)

说明 跳转 Harmony PiP 点播媒体。直播流或不可跳转媒体会通过 fail 返回明确错误。

参数

参数 类型 必填 说明 默认值 可选参数
options SeekPictureInPictureOptions 点播跳转参数对象 positionMs / success / fail / complete
options.positionMs number 目标播放位置,单位毫秒 >= 0
options.success function 跳转成功回调,返回最新状态
options.fail function 未准备、不可跳转或参数错误回调
options.complete function 完成回调,成功或失败都会触发

返回值 无同步返回值;success 返回 PictureInPicturePlaybackState。仅 App-Harmony 支持真实控制。

getPictureInPicturePlaybackState(options)

说明 获取统一的 Harmony PiP 播放快照。结果不会包含完整媒体 URL、请求头或本地绝对路径。

参数

参数 类型 必填 说明 默认值 可选参数
options PictureInPicturePlaybackOptions 状态查询回调对象 success / fail / complete
options.success function 查询成功回调
options.fail function 查询失败回调
options.complete function 完成回调,成功或失败都会触发

返回值

字段 类型 说明
prepared boolean 媒体与 PiPController 是否已准备
active boolean 系统 PiP 窗口是否活动
autoEnterOnHome boolean 是否允许按 Home 自动进入 PiP
playerState string Harmony AVPlayer 当前状态
sourceType FloatWindowContentType | null 当前媒体来源类型,不包含地址
isLive boolean 当前媒体是否为直播流
playing boolean 当前媒体是否正在播放
seekable boolean 当前媒体是否支持跳转
positionMs number 当前播放位置,单位毫秒
durationMs number 媒体时长,直播或未知时为 0
loop boolean 点播媒体是否循环播放
progressIntervalMs number 点播进度事件间隔,单位毫秒

openFloatWindow(options)

说明 打开悬浮窗。Android 可使用 overlay 全局悬浮或 inApp 应用内悬浮;Harmony 支持 inApp 应用内浮窗,以及网络、本地资源和应用沙箱 MP4 的 pipoverlay 返回明确受限原因;iOS 支持 inApp 和最佳努力 PiP。

支持平台 Android / iOS / Harmony

参数

参数 类型 必填 说明 默认值 可选参数
options OpenFloatWindowOptions 打开悬浮窗参数对象 mode / content / position / size / sizePreset / dragEnabled / edgeSnap / rememberPosition / keepInScreen / edgePadding / visible / success / fail / complete
options.mode FloatWindowMode 悬浮窗模式 Android 默认 overlay,Harmony/iOS 默认 inApp inApp / overlay / pip
options.content FloatWindowContent 悬浮窗内容或 PiP 媒体 type / value / headers / isVideoStream / bridgeName / allowedOrigins / webMediaPermissions / userAgentSuffix
options.content.bridgeName string H5 消息桥对象名;仅消息通信需要 合法 JavaScript 标识符
options.content.allowedOrigins string[] 消息桥或媒体采集允许的精确 HTTPS Origin [] 不含路径、查询、片段或通配符
options.content.webMediaPermissions FloatWindowWebMediaPermission[] Android 可信 H5 可请求的媒体能力 [] camera / microphone
options.position FloatWindowPosition 初始坐标 Android/Harmony { x: 72, y: 180 },iOS { x: 24, y: 120 } x / y
options.size FloatWindowSize 自定义尺寸 width / height
options.sizePreset FloatWindowSizePreset 尺寸预设;fullscreen 自动铺满当前应用可用窗口 medium small / medium / large / custom / fullscreen
options.dragEnabled boolean 是否允许拖拽 true true / false
options.edgeSnap boolean 拖拽结束后是否自动吸附左右边缘 false true / false
options.rememberPosition boolean 是否记忆本次运行期间最后一次坐标 false true / false
options.keepInScreen boolean 是否把悬浮窗修正到屏幕可见区域内 true true / false
options.edgePadding number 吸附和可见区域修正时与屏幕边缘的间距 12
options.visible boolean 打开后是否立即显示 true true / false
options.success function 打开成功回调
options.fail function 打开失败回调
options.complete function 完成回调,成功或失败都会触发

返回值

字段 类型 说明
opened boolean 是否已打开
visible boolean 当前是否可见
mode FloatWindowMode 当前模式
dragEnabled boolean 是否允许拖拽
edgeSnap boolean 是否开启边缘吸附
rememberPosition boolean 是否开启会话内位置记忆
keepInScreen boolean 是否开启可见区域修正
edgePadding number 当前边缘间距
position FloatWindowPosition 当前坐标
size FloatWindowSize 当前尺寸
sizePreset FloatWindowSizePreset 当前尺寸预设
content FloatWindowContent | null 当前内容

getCapabilities(options)

说明 获取当前平台支持情况。建议业务在展示入口前先调用该 API。

参数

参数 类型 必填 说明 默认值 可选参数
options GetCapabilitiesOptions 能力查询回调对象 success / fail / complete
options.success function 查询成功回调
options.fail function 查询失败回调
options.complete function 完成回调

返回值

字段 类型 说明
supported boolean 当前平台是否可接入插件能力
platform string 当前平台名称
inApp boolean 是否支持应用内悬浮
overlay boolean 是否支持全局悬浮
pip boolean 是否支持画中画
draggable boolean 是否支持拖拽
resizable boolean 是否支持大小切换
edgeSnap boolean 是否支持边缘吸附
positionMemory boolean 是否支持会话内位置记忆
safeAreaCorrection boolean 是否支持可见区域修正
webContent boolean 是否支持 Web 内容
localAssetContent boolean 是否支持本地 HTML 内容
h5Bridge boolean 是否支持 H5 ↔ App 双向通信
bridgeOriginAllowlist boolean 是否支持精确 Origin 白名单
webMediaCapture boolean 是否支持可信 Origin WebView 摄像头/麦克风采集
requiresOverlayPermission boolean 是否需要系统悬浮窗权限
requiresCustomBase boolean 是否需要自定义基座
restrictedReason string 不支持或受限原因

checkOverlayPermission(options)

说明 检查 Android 系统悬浮窗权限。非 Android 平台会返回明确平台边界,业务可据此隐藏全局悬浮入口。

参数

参数 类型 必填 说明 默认值 可选参数
options CheckOverlayPermissionOptions 权限检查回调对象 success / fail / complete
options.success function 检查成功回调
options.fail function 检查失败回调
options.complete function 完成回调

返回值

字段 类型 说明
platform string 当前平台
granted boolean 是否已授权
requiresOverlayPermission boolean 是否需要系统悬浮窗权限
canOpenSettings boolean 是否可打开系统设置页
settingsUri string Android 设置页 URI
packageName string Android 应用包名
restrictedReason string 平台限制说明

getFloatWindowState(options)

说明 获取当前悬浮窗运行态快照,适合判断是否已打开、是否可见、当前尺寸和坐标。

参数

参数 类型 必填 说明 默认值 可选参数
options GetFloatWindowStateOptions 状态查询回调对象 success / fail / complete

返回值

字段 类型 说明
opened boolean 是否已打开
visible boolean 是否可见
mode FloatWindowMode 当前模式
dragEnabled boolean 是否允许拖拽
edgeSnap boolean 是否开启边缘吸附
rememberPosition boolean 是否开启会话内位置记忆
keepInScreen boolean 是否开启可见区域修正
edgePadding number 当前边缘间距
position FloatWindowPosition 当前坐标
size FloatWindowSize 当前尺寸
sizePreset FloatWindowSizePreset 当前尺寸预设
content FloatWindowContent | null 当前内容

getFloatWindowDiagnostics(options)

说明 获取运行诊断报告,便于客户接入、插件市场演示和售后排查。

参数

参数 类型 必填 说明 默认值 可选参数
options GetFloatWindowDiagnosticsOptions 诊断查询回调对象 success / fail / complete

返回值

字段 类型 说明
platform string 当前平台
state FloatWindowState 当前运行态快照
overlayPermission OverlayPermissionResult 悬浮窗权限状态
webViewReady boolean Android WebView 是否已创建
windowAttached boolean 原生窗口是否已附着
layoutReady boolean 原生布局参数是否已就绪
listenerStatus FloatWindowListenerStatus 拖拽、点击、内容事件监听状态
bridgeEnabled boolean 当前内容是否配置并启用消息桥
bridgeReady boolean 当前页面是否已加载且通过白名单校验
bridgeName string | null 当前桥对象名称
currentBridgeOrigin string | null 当前获批页面范围
allowedOrigins string[] 当前规范化白名单
lastBridgeError string | null 最近一次桥接错误摘要
requiresCustomBase boolean 是否需要自定义基座
sdkInt number Android SDK 版本
restrictedReason string 平台限制说明

通用参数类型

FloatWindowContent

参数 类型 必填 说明 默认值 可选参数
type FloatWindowContentType 内容类型 url / localAsset / localFile
value string URL、应用资源路径或应用沙箱媒体路径
headers UTSJSONObject 网络媒体请求头,仅 url 有效;字段值必须为字符串
isVideoStream boolean 是否为视频流内容,PiP 场景必须为 true false true / false
bridgeName string 启用 H5 双向通信的 JavaScript 桥对象名,最长 64 字符 合法 JavaScript 标识符
allowedOrigins string[] 远程 H5 精确 HTTPS Origin 白名单;本地资源自动限制在应用资源范围 例如 https://example.com
userAgentSuffix string Android WebView UA 后缀

FloatWindowPosition

参数 类型 必填 说明 默认值 可选参数
x number 屏幕横向坐标
y number 屏幕纵向坐标

FloatWindowSize

参数 类型 必填 说明 默认值 可选参数
width number 自定义宽度;Android 为物理像素 px、iOS 为逻辑点 pt、Harmony 为逻辑单位 vp,Android 最小会收敛到 120
height number 自定义高度;Android 为物理像素 px、iOS 为逻辑点 pt、Harmony 为逻辑单位 vp,Android 最小会收敛到 90

内容事件

Harmony ArkWeb 内容事件

事件名 payload 说明
controllerAttached { source } ArkWeb 控制器已与 Web 组件关联。
pageBegin { url } 主页面开始加载。
pageEnd { url } 主页面加载完成。
pageError { code, message } 主页面加载失败;远程网页可检查网络权限、网络状态和 URL,本地网页可检查资源路径。

Harmony 系统 PiP 事件

事件名 payload 说明
pipPreparing { data, playerState } 正在创建视频 Surface 并准备 AVPlayer。
pipPrepared { data, playerState } 媒体和 PiPController 已准备,可等待 Home 自动进入或继续控制。
pipStarted { data, playerState } 系统 PiP 已进入。
pipPlaying { data, playerState } 视频正在播放。
pipPaused { data, playerState } 用户通过系统控制面板暂停。
pipProgress { data, playerState } progressIntervalMs 返回脱敏后的点播进度快照。
pipSeeked { data, playerState } 点播媒体已完成跳转。
pipRestored { data, playerState } 用户从系统 PiP 恢复到主应用。
pipStopped { data, playerState } 系统或 API 已关闭 PiP,原生资源进入释放流程。
pipError { data, playerState } PiP 创建、播放或控制失败,data 中包含错误信息。

错误码

错误码 含义 说明
9015001 unsupported 当前平台或能力暂不支持。
9015002 invalid params 参数为空、内容为空或参数不合法。
9015003 overlay permission denied Android 未授予系统悬浮窗权限。
9015004 not opened 悬浮窗尚未打开。
9015005 already opened 悬浮窗已经打开,重复打开前请先关闭。
9015006 mode restricted 当前平台不支持请求的模式,例如 iOS 请求全局悬浮。
9015007 pip content invalid PiP 内容不符合要求,通常是未声明视频流。
9015008 native failure 原生能力调用失败。
9015009 content load failed 内容加载失败。
9015010 listener missing 监听器缺失或不合法。
9015011 trusted web config invalid 桥名、Origin 白名单或 webMediaPermissions 配置不合法。
9015012 bridge disabled 当前悬浮内容未启用消息桥。
9015013 bridge not ready 页面尚未加载完成或已离开可信范围。
9015014 message invalid 消息 event 为空或内容无法序列化。
9015015 message too large 序列化后的 UTF-8 消息超过 256 KB。
9015016 message delivery failed App 向 H5 派发消息失败。

平台支持

平台 是否支持 说明
App-Android 支持全局悬浮、应用内悬浮、WebView 内容、H5 双向通信、精确 HTTPS Origin 白名单、拖拽、尺寸切换、位置管理和 PiP。
App-iOS 部分支持 支持应用内轻量浮窗和最佳努力 PiP,不支持跨应用全局悬浮。
App-Harmony 部分支持 Harmony 支持应用内浮窗、ArkWeb URL/本地 HTML、H5 双向通信、精确 HTTPS Origin 白名单,以及网络、本地资源和应用沙箱 MP4 系统 PiP;暂不支持跨应用全局悬浮、网页直接进入系统 PiP 及自定义系统控制面板。
Web 降级 返回能力矩阵和明确不支持错误。
微信小程序 降级 返回能力矩阵和明确不支持错误。
支付宝小程序 降级 返回能力矩阵和明确不支持错误。

权限与自定义基座

Android

插件声明了以下权限:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.INTERNET" />
能力 是否需要自定义基座 说明
全局悬浮窗 overlay 需要 Android 原生悬浮窗权限和 UTS 原生逻辑。
应用内悬浮窗 inApp 不需要系统悬浮窗权限,但仍依赖 UTS 原生逻辑。
WebView 内容 使用 Android 原生 WebView。
H5 双向通信 使用 AndroidX WebKit 原生 Web Message API;升级后必须重打并安装 Android 自定义基座。
PiP 使用 Android 原生画中画能力;插件会向 PandoraEntryActivity 合并 PiP 声明,升级后必须重打并安装自定义基座。

Harmony

Harmony 应用内浮窗、ArkWeb、H5 双向通信与系统 PiP 都依赖原生 UTS/ETS。首次接入或升级原生实现后,必须重新构建并安装 Harmony 原生包;只替换 appResource/wgt 无法更新 ArkWeb WebMessagePort 桥、PiP 或媒体实现。

iOS

iOS 系统不允许普通应用创建跨应用全局悬浮窗。本插件首版提供应用内轻量浮窗和最佳努力 PiP,不承诺跨应用悬浮。

注意事项

  • Android 全局悬浮窗需要用户在系统设置中授权;未授权时会返回 9015003
  • PiP 只建议用于视频流场景,普通网页或业务卡片请使用悬浮窗模式。
  • Android 与 Harmony 的远程 H5 桥只接受精确 HTTPS Origin,禁止使用通配符;页面离开白名单后桥会立即失效。
  • 单条 H5 ↔ App 消息最大 256 KB,消息必须是带非空 event 的 JSON 对象;插件不提供任意 JavaScript 执行 API。
  • iOS 受系统策略限制,不支持跨应用全局悬浮,发布说明中请勿承诺该能力。
  • Harmony 已支持应用内浮窗、ArkWeb URL/本地 HTML 和网络视频系统 PiP;远程内容需要 ohos.permission.INTERNET,ArkWeb 加载结果应监听 pageEnd/pageError,PiP 应先调用 getCapabilities 判断设备能力;跨应用全局悬浮仍不支持。

作者系列UTS插件

以下为已在 DCloud 插件市场上架的作者系列 UTS 插件,可按业务场景组合使用。未列出的插件表示当前未确认公开市场页,后续上架后再补充。

插件 能力方向 插件市场
lizhao-nfc-pro NFC 标签读写、NDEF、IsoDep 与诊断 查看插件
lizhao-float-window 悬浮窗、画中画、权限与诊断 查看插件
lizhao-device-id 设备标识、隐私策略与诊断 查看插件
lizhao-scan-pro 原生扫码、连续扫码、相册识别 查看插件
lizhao-choose-file 原生文件选择、上传、进度与取消 查看插件
lizhao-bg-audio 背景音频播放、队列、倍速与事件 查看插件
lizhao-smart-tts 系统 TTS、云端合成、听书方案 查看插件
lizhao-share-plus 系统分享、远程文件下载后分享 查看插件
lizhao-sqlite-pro 原生 SQLite、迁移、备份与诊断 查看插件
lizhao-icon-pro SVG 图标组件、多主题与缓存 查看插件
lizhao-cast-screen DLNA 投屏、AirPlay 路由入口 查看插件
lizhao-call-kit 电话、短信、通讯录原生能力 查看插件
lizhao-app-keepalive 应用保活、唤醒、自愈与报告 查看插件
lizhao-doc-corrector 文档扫描、矫正、增强与识别 查看插件
lizhao-emu-detect 模拟器环境检测、风险评分与证据 查看插件
lizhao-gallery-pro 相册媒体分页、筛选、缩略图与导出 查看插件
lizhao-video-thumb 视频封面、批量取帧与 Base64 返回 查看插件
lizhao-ble BLE 扫描、连接、读写、通知与自动重连 查看插件
lizhao-sse-pro SSE、Line、JSONL 与 Raw 流式请求 查看插件

隐私、权限声明

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

Android 悬浮窗权限(SYSTEM_ALERT_WINDOW);网页音视频需要摄像头、录音和音频模式权限(CAMERA、RECORD_AUDIO、MODIFY_AUDIO_SETTINGS);Android/Harmony 远程网页需要网络权限(INTERNET);iOS 受系统策略约束

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

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