HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

uniapp人脸识别UTS API插件制作

活体检测 uts插件

人脸识别UTS API插件简介

1:1人脸识别,活体检测UTS API插件,支持iOS,Android,支持uniappX和uniapp(vue2&vue3)。
所有功能都是设备端侧AI能力可开飞行模式体验无需网络,无需后台API服务可完全离线运行,高性能无依赖

插件部分的代码: https://github.com/FaceAISDK/FaceAISDK_uniapp_UTS

一般制作插件需求具备uniapp,Android iOS 3种交叉知识储备,否则调试会非常的痛苦,验证效果自定义基座也很难受
当然你可以借助AI辅助编程工具能省事不少

快速体验完整人脸识别功能可以下载Android演示App:
<div align=center>
<img src="https://www.pgyer.com/app/qrcode/faceVerify" width = 15% alt="扫一扫下载Demo"/>
</div>

使用方法

如果你是第一次运行UTS插件工程/引入UTS API插件,你应先安装官方说明配置好基础环境 基础环境

开发调试阶段请开启调试模式,Android-manifest.json distribute配置 "debuggable" : true,

1. 下载最新Demo工程先跑通;熟悉半天后参考文档集成到主项目

2. 运行 -》 运行到手机或模拟器 -》制作自定义调试基座 -》打包 (期间不要修改原生代码)

.
制作自定义调试基座

3. 运行 -》运行到iOS/Android基座 -》使用自定义基座运行 -》本地基座 -》运行

.
运行到手机

4. 把插件引入到你的主项目(即 import {faceVerify,**等方法} from "@/uni_modules/FaceAISDK-Core";)

一定一定要先制作自定义调试基准,然后运行的时候使用自定义基准-本地基座,请看图片步骤引导说明

常见错误与解决方法

1.iOS 基座安装到手机后很久都是白屏/黑屏

   控制台输出  
   项目 [FaceAI_API_Plugin] 已启动。请点击手机/模拟器的运行基座App(uni-app x)查看效果。  
   如应用未更新,请在手机上杀掉基座进程重启  

老旧手机根据提示确保杀死基座进程,稍后重启App就可以了

2.炫彩活体提示光线太亮导致失败

这个基本上只能规避强光环境了,或引导用户用手遮住强烈光线,让手机彩色光能照到脸部
室外强光环境建议使用动作活体+静默活体检测

3.改动原生swift/kotlin 代码导致基座不能正常运行

只能重新制作自定义调试基座,UTS API插件使用方如果不需要修改插件底层实现尽量不用改原生代码

人脸识别,活体检测状态码

人脸识别,活体检测状态码含义

    let DEFAULT = 0                  // 0   初始化状态,流程没有开始  
    let VERIFY_SUCCESS = 1           // 1   人脸识别对比成功大于设置的threshold  
    let VERIFY_FAILED = 2            // 2   人脸识别对比识别小于设置的threshold  
    let MOTION_LIVENESS_SUCCESS = 3  // 3   动作活体检测成功(基本不用,还有后续动作)  
    let MOTION_LIVENESS_TIMEOUT = 4  // 4   动作活体超时  
    let NO_FACE_MULTI = 5            // 5   多次没有检测到人脸  
    let NO_FACE_FEATURE = 6          // 6   没有对应的人脸特征值  
    let COLOR_LIVENESS_SUCCESS = 7   // 7   炫彩活体成功  
    let COLOR_LIVENESS_FAILED = 8    // 8   炫彩活体失败  
    let COLOR_LIVENESS_LIGHT_TOO_HIGH = 9 // 9   炫彩活体失败,光线亮度过高  
    let ALL_LIVENESS_SUCCESS = 10    // 10  所有的活体检测完成(包括动作和炫彩)  
   let SILENT_LIVENESS_FAILED = 11  // 11  静默活体检测失败

人脸识别 目前插件部分的代码是开放修改的,底层SDK不开放。 欢迎提issues反馈问题

🌍: https://faceaisdk.github.io/index
📮:FaceAISDK.Service@gmail.com

继续阅读 »

人脸识别UTS API插件简介

1:1人脸识别,活体检测UTS API插件,支持iOS,Android,支持uniappX和uniapp(vue2&vue3)。
所有功能都是设备端侧AI能力可开飞行模式体验无需网络,无需后台API服务可完全离线运行,高性能无依赖

插件部分的代码: https://github.com/FaceAISDK/FaceAISDK_uniapp_UTS

一般制作插件需求具备uniapp,Android iOS 3种交叉知识储备,否则调试会非常的痛苦,验证效果自定义基座也很难受
当然你可以借助AI辅助编程工具能省事不少

快速体验完整人脸识别功能可以下载Android演示App:
<div align=center>
<img src="https://www.pgyer.com/app/qrcode/faceVerify" width = 15% alt="扫一扫下载Demo"/>
</div>

使用方法

如果你是第一次运行UTS插件工程/引入UTS API插件,你应先安装官方说明配置好基础环境 基础环境

开发调试阶段请开启调试模式,Android-manifest.json distribute配置 "debuggable" : true,

1. 下载最新Demo工程先跑通;熟悉半天后参考文档集成到主项目

2. 运行 -》 运行到手机或模拟器 -》制作自定义调试基座 -》打包 (期间不要修改原生代码)

.
制作自定义调试基座

3. 运行 -》运行到iOS/Android基座 -》使用自定义基座运行 -》本地基座 -》运行

.
运行到手机

4. 把插件引入到你的主项目(即 import {faceVerify,**等方法} from "@/uni_modules/FaceAISDK-Core";)

一定一定要先制作自定义调试基准,然后运行的时候使用自定义基准-本地基座,请看图片步骤引导说明

常见错误与解决方法

1.iOS 基座安装到手机后很久都是白屏/黑屏

   控制台输出  
   项目 [FaceAI_API_Plugin] 已启动。请点击手机/模拟器的运行基座App(uni-app x)查看效果。  
   如应用未更新,请在手机上杀掉基座进程重启  

老旧手机根据提示确保杀死基座进程,稍后重启App就可以了

2.炫彩活体提示光线太亮导致失败

这个基本上只能规避强光环境了,或引导用户用手遮住强烈光线,让手机彩色光能照到脸部
室外强光环境建议使用动作活体+静默活体检测

3.改动原生swift/kotlin 代码导致基座不能正常运行

只能重新制作自定义调试基座,UTS API插件使用方如果不需要修改插件底层实现尽量不用改原生代码

人脸识别,活体检测状态码

人脸识别,活体检测状态码含义

    let DEFAULT = 0                  // 0   初始化状态,流程没有开始  
    let VERIFY_SUCCESS = 1           // 1   人脸识别对比成功大于设置的threshold  
    let VERIFY_FAILED = 2            // 2   人脸识别对比识别小于设置的threshold  
    let MOTION_LIVENESS_SUCCESS = 3  // 3   动作活体检测成功(基本不用,还有后续动作)  
    let MOTION_LIVENESS_TIMEOUT = 4  // 4   动作活体超时  
    let NO_FACE_MULTI = 5            // 5   多次没有检测到人脸  
    let NO_FACE_FEATURE = 6          // 6   没有对应的人脸特征值  
    let COLOR_LIVENESS_SUCCESS = 7   // 7   炫彩活体成功  
    let COLOR_LIVENESS_FAILED = 8    // 8   炫彩活体失败  
    let COLOR_LIVENESS_LIGHT_TOO_HIGH = 9 // 9   炫彩活体失败,光线亮度过高  
    let ALL_LIVENESS_SUCCESS = 10    // 10  所有的活体检测完成(包括动作和炫彩)  
   let SILENT_LIVENESS_FAILED = 11  // 11  静默活体检测失败

人脸识别 目前插件部分的代码是开放修改的,底层SDK不开放。 欢迎提issues反馈问题

🌍: https://faceaisdk.github.io/index
📮:FaceAISDK.Service@gmail.com

收起阅读 »

解决 使用uni-agent 购买 订阅套餐 提示无法访问

考虑系统防火墙的情况。把防火墙关闭试一下。

内部会启动一个服务,占用端口127.0.0.1:4096

防火墙阻止了这个服务访问。

考虑系统防火墙的情况。把防火墙关闭试一下。

内部会启动一个服务,占用端口127.0.0.1:4096

防火墙阻止了这个服务访问。

【2026全民国家安全教育日】筑牢网络安全防线,DCloud 开发者在行动!

网络安全

各位 DCloud 社区的开发者小伙伴们,大家好!👋

今天(4月15日)是第十一个全民国家安全教育日。提到“国家安全”,很多人的第一反应可能是军事防御、防谍保密等宏观层面的内容。但实际上,在数字化、智能化的今天,网络安全和数据安全已经成为国家安全体系中至关重要的一环!

作为在这个时代浪潮中冲浪的开发者,我们敲下的每一行代码、设计的每一个业务逻辑,其实都与“安全”息息相关。

🛡️ 开发者与国家安全的距离有多近?

在日常的 uni-app 开发、前端构建或后端接口对接中,我们不仅是产品的创造者,更是用户数据和网络安全的“守门员”:

  1. 数据安全与隐私保护:我们的 App/小程序是否合规收集用户数据?是否在本地存储了未加密的敏感信息?防范数据泄露,不仅是保护用户,更是维护国家数据安全底线。
  2. 抵御网络攻击:无论是 XSS、CSRF,还是各类接口越权访问,不规范的代码随时可能成为黑客攻击系统的突破口。
  3. 开源组件的安全:引入第三方插件或 SDK 时,是否关注过其安全性?供应链安全目前也是网络安全防范的重中之重。

💡 我们能做些什么?

在2026年的今天,网络空间已成为大国博弈的“第五空间”。为了响应全民国家安全教育日的号召,我们在此向社区的每一位开发者发出倡议:

  • 增强安全意识:主动学习《网络安全法》、《数据安全法》、《个人信息保护法》等相关法律法规,让“合规”成为开发的第一原则。
  • 践行安全开发(DevSecOps):在需求设计、代码编写、测试发布的每一个环节,都把安全因素考虑进去。拒绝“先上线再修补”的侥幸心理。
  • 保护用户隐私:严格落实 App 隐私合规要求,遵循“最小必要”原则获取用户权限,妥善加密敏感数据。

💬 社区互动:你的项目是如何做安全防护的?

国家安全,人人有责;网络安全,代码为基。

欢迎大家在评论区分享:在日常的开发中,你遇到过哪些安全大坑?或者你在项目中使用了哪些好用的安全防护手段/插件?

让我们一起交流学习,共同构建更安全、更可靠的应用生态!👇


【活动说明】
本文为响应2026年第十一个全民国家安全教育日主题宣传活动所发。维护网络空间清朗,需要你我共同参与!

继续阅读 »

各位 DCloud 社区的开发者小伙伴们,大家好!👋

今天(4月15日)是第十一个全民国家安全教育日。提到“国家安全”,很多人的第一反应可能是军事防御、防谍保密等宏观层面的内容。但实际上,在数字化、智能化的今天,网络安全和数据安全已经成为国家安全体系中至关重要的一环!

作为在这个时代浪潮中冲浪的开发者,我们敲下的每一行代码、设计的每一个业务逻辑,其实都与“安全”息息相关。

🛡️ 开发者与国家安全的距离有多近?

在日常的 uni-app 开发、前端构建或后端接口对接中,我们不仅是产品的创造者,更是用户数据和网络安全的“守门员”:

  1. 数据安全与隐私保护:我们的 App/小程序是否合规收集用户数据?是否在本地存储了未加密的敏感信息?防范数据泄露,不仅是保护用户,更是维护国家数据安全底线。
  2. 抵御网络攻击:无论是 XSS、CSRF,还是各类接口越权访问,不规范的代码随时可能成为黑客攻击系统的突破口。
  3. 开源组件的安全:引入第三方插件或 SDK 时,是否关注过其安全性?供应链安全目前也是网络安全防范的重中之重。

💡 我们能做些什么?

在2026年的今天,网络空间已成为大国博弈的“第五空间”。为了响应全民国家安全教育日的号召,我们在此向社区的每一位开发者发出倡议:

  • 增强安全意识:主动学习《网络安全法》、《数据安全法》、《个人信息保护法》等相关法律法规,让“合规”成为开发的第一原则。
  • 践行安全开发(DevSecOps):在需求设计、代码编写、测试发布的每一个环节,都把安全因素考虑进去。拒绝“先上线再修补”的侥幸心理。
  • 保护用户隐私:严格落实 App 隐私合规要求,遵循“最小必要”原则获取用户权限,妥善加密敏感数据。

💬 社区互动:你的项目是如何做安全防护的?

国家安全,人人有责;网络安全,代码为基。

欢迎大家在评论区分享:在日常的开发中,你遇到过哪些安全大坑?或者你在项目中使用了哪些好用的安全防护手段/插件?

让我们一起交流学习,共同构建更安全、更可靠的应用生态!👇


【活动说明】
本文为响应2026年第十一个全民国家安全教育日主题宣传活动所发。维护网络空间清朗,需要你我共同参与!

收起阅读 »

小程序包体积分析利器 -- vite-plugin-component-insight

体积优化 支付宝小程序 分包 分包异步化 微信小程序

背景

微信小程序支持分包异步化 跨分包自定义组件引用,但是,很多业务项目往往都比较复杂,组件使用情况也不容易看清,开发中很容易遇到这些问题:

  • 无法快速获悉某个组件到底被哪些页面使用
  • 不清楚一个组件在项目里出现了多少次
  • 做分包优化时,不知道组件放在主包还是分包更合适

于是,我写了一个插件 vite-plugin-component-insight 来简化这一过程。

特性

  • 开箱即用,配置简单
  • 统计组件的使用次数和调用情况
  • 结合主包和分包关系输出组件划分建议
  • 支持生成 markdown 报告,方便查看更加详细的信息
  • 支持 hx 项目和 cli 项目
  • 支持 uni-app 和 uni-app-x (vue3)

使用指南

安装

npm install @uni_toolkit/vite-plugin-component-insight -D  
# 或  
pnpm add @uni_toolkit/vite-plugin-component-insight -D  
# 或  
yarn add @uni_toolkit/vite-plugin-component-insight -D

配置插件

vite.config.js 中使用:

import { defineConfig } from 'vite';  
import uni from '@dcloudio/vite-plugin-uni';  
import componentInsight from '@uni_toolkit/vite-plugin-component-insight';  

export default defineConfig({  
  plugins: [  
    uni(),  
    componentInsight(), // 在 uni 之后调用  
  ],  
});

Tips

插件默认不会生成文件,而是在控制台直接输出分析结果。效果参考附件1

如果需要生成 markdown 报告,可以这样配置:

componentInsight({  
  reportMarkdownPath: 'logs/component-insight-report.md',  
})

如果只想生成 markdown,不输出控制台日志,可以这样配置:

componentInsight({  
  logToConsole: false,  
  reportMarkdownPath: 'logs/component-insight-report.md',  
})

完整配置项

interface VitePluginComponentInsightOptions {  
  reportMarkdownPath?: string;  
  logToConsole?: boolean;  
  exclude?: ReadonlyArray<string | RegExp> | string | RegExp | null;  
  include?: ReadonlyArray<string | RegExp> | string | RegExp | null;  
}
选项 说明
reportMarkdownPath 自定义 Markdown 报告输出路径,不传则不生成 Markdown
logToConsole 是否输出控制台日志,默认开启
exclude 指定过滤的文件,默认过滤 node_modules 和 uni_modules
include 指定包含的文件,默认为空

交流群

如果你有其他 uniapp 或者 uniappx 的问题想要咨询,可以扫描附件中的微信二维码进群

继续阅读 »

背景

微信小程序支持分包异步化 跨分包自定义组件引用,但是,很多业务项目往往都比较复杂,组件使用情况也不容易看清,开发中很容易遇到这些问题:

  • 无法快速获悉某个组件到底被哪些页面使用
  • 不清楚一个组件在项目里出现了多少次
  • 做分包优化时,不知道组件放在主包还是分包更合适

于是,我写了一个插件 vite-plugin-component-insight 来简化这一过程。

特性

  • 开箱即用,配置简单
  • 统计组件的使用次数和调用情况
  • 结合主包和分包关系输出组件划分建议
  • 支持生成 markdown 报告,方便查看更加详细的信息
  • 支持 hx 项目和 cli 项目
  • 支持 uni-app 和 uni-app-x (vue3)

使用指南

安装

npm install @uni_toolkit/vite-plugin-component-insight -D  
# 或  
pnpm add @uni_toolkit/vite-plugin-component-insight -D  
# 或  
yarn add @uni_toolkit/vite-plugin-component-insight -D

配置插件

vite.config.js 中使用:

import { defineConfig } from 'vite';  
import uni from '@dcloudio/vite-plugin-uni';  
import componentInsight from '@uni_toolkit/vite-plugin-component-insight';  

export default defineConfig({  
  plugins: [  
    uni(),  
    componentInsight(), // 在 uni 之后调用  
  ],  
});

Tips

插件默认不会生成文件,而是在控制台直接输出分析结果。效果参考附件1

如果需要生成 markdown 报告,可以这样配置:

componentInsight({  
  reportMarkdownPath: 'logs/component-insight-report.md',  
})

如果只想生成 markdown,不输出控制台日志,可以这样配置:

componentInsight({  
  logToConsole: false,  
  reportMarkdownPath: 'logs/component-insight-report.md',  
})

完整配置项

interface VitePluginComponentInsightOptions {  
  reportMarkdownPath?: string;  
  logToConsole?: boolean;  
  exclude?: ReadonlyArray<string | RegExp> | string | RegExp | null;  
  include?: ReadonlyArray<string | RegExp> | string | RegExp | null;  
}
选项 说明
reportMarkdownPath 自定义 Markdown 报告输出路径,不传则不生成 Markdown
logToConsole 是否输出控制台日志,默认开启
exclude 指定过滤的文件,默认过滤 node_modules 和 uni_modules
include 指定包含的文件,默认为空

交流群

如果你有其他 uniapp 或者 uniappx 的问题想要咨询,可以扫描附件中的微信二维码进群

收起阅读 »

UniApp资深程序猿,八年全栈经验全职开发,主打uniCloud+uniapp全栈开发,可独立完成各类APP,小程序,H5的开发,效率高,成本低,全欢迎老板来咨询,微信同QQ:170842262

我的优势
1、精通uniCloud uniapp等技术栈,熟练使用 前后端分离开发 、拥有丰富的项目开发经验。
2、能够独立完成从项目的 分析 、设计 、 开发 、测试 、部署 到 维护与优化 的全过程,能 快速的对需求进行梳理并制定开发计划。
3、注重代码可维护性、可扩展性、性能优化等方面的工作。
4、汇聚多行业100 成熟项目案例 可供复用,效率倍增,快人一步。
如果您正在寻找一位高效、专业的开发者来完成您的项目,我非常愿意为您提供优质的服务,共同推动项目顺利进行。
如果您对我的技能与工作经验感兴趣,请通过微信联系我,我们可以进一步探讨您的具体项目需求,并且开展合作。
微信同QQ:170842262

继续阅读 »

我的优势
1、精通uniCloud uniapp等技术栈,熟练使用 前后端分离开发 、拥有丰富的项目开发经验。
2、能够独立完成从项目的 分析 、设计 、 开发 、测试 、部署 到 维护与优化 的全过程,能 快速的对需求进行梳理并制定开发计划。
3、注重代码可维护性、可扩展性、性能优化等方面的工作。
4、汇聚多行业100 成熟项目案例 可供复用,效率倍增,快人一步。
如果您正在寻找一位高效、专业的开发者来完成您的项目,我非常愿意为您提供优质的服务,共同推动项目顺利进行。
如果您对我的技能与工作经验感兴趣,请通过微信联系我,我们可以进一步探讨您的具体项目需求,并且开展合作。
微信同QQ:170842262

收起阅读 »

uniapp扩展组件uni-file-picker有安全漏洞,用云效部署后,会泄漏源代码

安全漏洞

我是h5项目,用uni-file-picker进行文件选择上传,然后用云效部署,发现在这个页面的js文件里,有我自己的云效账号密码token等,继而能找到阿里云仓库源代码,太神奇了。

我写的代码如下,刚开始不知道是哪里泄漏的,反复验证后,发现是这段代码,哪怕只留下limit,也会泄漏:

uni-file-picker v-if="userinfo.id" class="file-picker" ref="filePickerRef" v-model="state.uploadFile"  
            limit="1" file-mediatype="all" :auto-upload="false" title="" :sourceType="['album']" @select="fileSelect" ></uni-file-picker>

部分泄漏内容如下:
Re({
npm_command: "run-script",
privileged: "false",
KUBERNETES_SERVICE_PORT_HTTPS:
STEP_DOCUMENT_JSON:
TASK_DIR:
npm_config_userconfig:
runnerCacheMode:
KUBERNETES_SERVICE_PORT:
npm_config_cache:
operator:
invalidStepVersion:
NVM_INC:
NVM_IOJS_ORG_MIRROR:
NODEGROUP_TYPE:
npm_config_electron_mirror:
HOSTNAME:
npm_config_always_auth: LANGUAGE:

继续阅读 »

我是h5项目,用uni-file-picker进行文件选择上传,然后用云效部署,发现在这个页面的js文件里,有我自己的云效账号密码token等,继而能找到阿里云仓库源代码,太神奇了。

我写的代码如下,刚开始不知道是哪里泄漏的,反复验证后,发现是这段代码,哪怕只留下limit,也会泄漏:

uni-file-picker v-if="userinfo.id" class="file-picker" ref="filePickerRef" v-model="state.uploadFile"  
            limit="1" file-mediatype="all" :auto-upload="false" title="" :sourceType="['album']" @select="fileSelect" ></uni-file-picker>

部分泄漏内容如下:
Re({
npm_command: "run-script",
privileged: "false",
KUBERNETES_SERVICE_PORT_HTTPS:
STEP_DOCUMENT_JSON:
TASK_DIR:
npm_config_userconfig:
runnerCacheMode:
KUBERNETES_SERVICE_PORT:
npm_config_cache:
operator:
invalidStepVersion:
NVM_INC:
NVM_IOJS_ORG_MIRROR:
NODEGROUP_TYPE:
npm_config_electron_mirror:
HOSTNAME:
npm_config_always_auth: LANGUAGE:

收起阅读 »

避坑:ios自定义启动图官方提供的storyboard 模板

iOS 启动图片

在storyboard 文件中包含了这么一段代码,我正常开发只是替换了外面的图片。快要上线了才发现启动图底部还有一行小字”hello uniapp“

                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="hello uniapp" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QBH-Ne-rcx">  
                                <rect key="frame" x="168" y="835" width="78.333333333333314" height="17"/>  
                                <fontDescription key="fontDescription" type="system" pointSize="14"/>  
                                <color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>  
                                <nil key="highlightedColor"/>  
                            </label>
继续阅读 »

在storyboard 文件中包含了这么一段代码,我正常开发只是替换了外面的图片。快要上线了才发现启动图底部还有一行小字”hello uniapp“

                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="hello uniapp" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QBH-Ne-rcx">  
                                <rect key="frame" x="168" y="835" width="78.333333333333314" height="17"/>  
                                <fontDescription key="fontDescription" type="system" pointSize="14"/>  
                                <color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>  
                                <nil key="highlightedColor"/>  
                            </label>
收起阅读 »

IOS 高版本跳转不到设置,应该怎么弄?

使用plus.runtime.openURL("app-settings:")

使用plus.runtime.openURL("app-settings:")

付费定制一个视频播放器插件

插件需求

要支持安卓、ios、网页,支持直播模式和回放模式,直播模式下可以支持切换线路,直播模式没有进度条,样式有些变化,回放模式下支持倍速播放,能做的联系我,付费

要支持安卓、ios、网页,支持直播模式和回放模式,直播模式下可以支持切换线路,直播模式没有进度条,样式有些变化,回放模式下支持倍速播放,能做的联系我,付费

【免费解答一切uniapp问题】

Debug

互相促进吧,我解决你的问题,正好补全我的知识点的死角。

互相促进吧,我解决你的问题,正好补全我的知识点的死角。

使用nativejs监听USB设备插拔

Native.JS

1.配置权限

<uses-feature android:name="android.hardware.usb.host"/>  
<uses-permission android:name="android.permission.USB_PERMISSION"/>

2.注册广播

const main = plus.android.runtimeMainActivity()  
const IntentFilter = plus.android.importClass('android.content.IntentFilter')  

/ 创建广播过滤器  
const filter = new IntentFilter()  
// filter.addAction(action)  
filter.addAction('android.hardware.usb.action.USB_DEVICE_ATTACHED')  
filter.addAction('android.hardware.usb.action.USB_DEVICE_DETACHED')  

const receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {  
    onReceive: function(context, intent) {  
        // console.log("USB广播触发了!!!")  
        // console.log("完整intent:", intent.toString())  
        const actionType = intent.toString().match(/act=([^\s]+)/)[1]  
        console.log(actionType)  
        if (actionType === 'android.hardware.usb.action.USB_DEVICE_ATTACHED') {  

        } else if (actionType === 'android.hardware.usb.action.USB_DEVICE_DETACHED') {  

        }  

    }  
})  

// 注册广播  
main.registerReceiver(receiver, filter)
继续阅读 »

1.配置权限

<uses-feature android:name="android.hardware.usb.host"/>  
<uses-permission android:name="android.permission.USB_PERMISSION"/>

2.注册广播

const main = plus.android.runtimeMainActivity()  
const IntentFilter = plus.android.importClass('android.content.IntentFilter')  

/ 创建广播过滤器  
const filter = new IntentFilter()  
// filter.addAction(action)  
filter.addAction('android.hardware.usb.action.USB_DEVICE_ATTACHED')  
filter.addAction('android.hardware.usb.action.USB_DEVICE_DETACHED')  

const receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {  
    onReceive: function(context, intent) {  
        // console.log("USB广播触发了!!!")  
        // console.log("完整intent:", intent.toString())  
        const actionType = intent.toString().match(/act=([^\s]+)/)[1]  
        console.log(actionType)  
        if (actionType === 'android.hardware.usb.action.USB_DEVICE_ATTACHED') {  

        } else if (actionType === 'android.hardware.usb.action.USB_DEVICE_DETACHED') {  

        }  

    }  
})  

// 注册广播  
main.registerReceiver(receiver, filter)
收起阅读 »

关于微信小程序自定义TabBar在uniapp中的使用

微信小程序 uniapp

在根项目(和main.js、pages.json等文件同级的地方)中创建微信小程序原生的 custom-tab-bar 文件,
可以微信小程序参考官方
https://developers.weixin.qq.com/miniprogram/dev/framework/ability/custom-tabbar.html
这里要注意的是
this.getTabBar().setData({
selected: 0
})
这种写法是在微信小程序原生中用的(微信小程序原生的.js中使用),
在uniapp中,应该如下使用,否者每次跳转tab页,都是第一个被选中
// 更新自定义 TabBar 选中状态(.vue中使用)
if (typeof this.$mp.page.getTabBar === 'function') {
const tabBar = this.$mp.page.getTabBar();
if (tabBar) {
tabBar.setData({
selected: 0
});
}
}

继续阅读 »

在根项目(和main.js、pages.json等文件同级的地方)中创建微信小程序原生的 custom-tab-bar 文件,
可以微信小程序参考官方
https://developers.weixin.qq.com/miniprogram/dev/framework/ability/custom-tabbar.html
这里要注意的是
this.getTabBar().setData({
selected: 0
})
这种写法是在微信小程序原生中用的(微信小程序原生的.js中使用),
在uniapp中,应该如下使用,否者每次跳转tab页,都是第一个被选中
// 更新自定义 TabBar 选中状态(.vue中使用)
if (typeof this.$mp.page.getTabBar === 'function') {
const tabBar = this.$mp.page.getTabBar();
if (tabBar) {
tabBar.setData({
selected: 0
});
}
}

收起阅读 »