uniapp 安卓和ios震动方法,支持息屏和后台震动,ios和安卓均通过测试

最近使用uniapp开发震动功能,发现uniapp提供的 uni.vibrateLong()的方法震动比较弱,而且不支持息屏和后台震动。plus.ios.importClass("UIImpactFeedbackGenerator")是在网上看到的,这个震动也比较弱,ios也不支持息屏和后台震动。

这种方式不支持后台/息屏震动,屏幕一关闭或者软件退到桌面就会停止震动,而且震动也比较弱:

// 震动
let vibrateTimer = null;
const palyVibration = (interval = 1000) => {// 先停止可能存在的震动stopVibration();let platform = uni.getSystemInfoSync().platform;if (platform === "ios") {// iOS循环震动const doVibrate = () => {let UIImpactFeedbackGenerator = plus.ios.importClass("UIImpactFeedbackGenerator");let impact = new UIImpactFeedbackGenerator();impact.prepare();impact.init(1);impact.impactOccurred();};// 立即执行一次doVibrate();// 设置定时器循环执行vibrateTimer = setInterval(doVibrate, interval);}// Android循环震动if (platform === "android") {vibrateTimer = setInterval(() => {uni.vibrateLong();}, interval);}
}

上面的代码不支持后台/息屏震动(屏幕一但关闭或者软件退到桌面就会停止震动),而且震动也比较弱

最好的解决震动方法,代码如下:

uniapp 安卓和ios震动方法,支持息屏和后台震动,即使软件在退出桌面也能正常震动,安卓和ios均测试正常可用。

//震动
let platform = uni.getSystemInfoSync().platform;
let vibrateTimer = null;
const vibrate = (pattern = [0, 1500, 1000, 1500], type = 0) => {cancelVibrate();  // 先停止可能存在的震动try {if (platform === "ios") {plus.device.vibrate(pattern);const doVibrate = () => plus.device.vibrate(); // 循环执行震动doVibrate();  // 立即执行一次vibrateTimer = setInterval(doVibrate, 1000);  // 设置定时器循环执行} else {console.log('震动频率', pattern)var Build = plus.android.importClass("android.os.Build");if (Build.VERSION.SDK_INT >= 26) {var Context = plus.android.importClass("android.content.Context");var main = plus.android.runtimeMainActivity();var vibrateService = main.getSystemService(Context.VIBRATOR_SERVICE);var AudioAttributes = plus.android.importClass("android.media.AudioAttributes");var audioAttributesBuilder = new AudioAttributes.Builder();plus.android.invoke(audioAttributesBuilder, 'setContentType', AudioAttributes.CONTENT_TYPE_SONIFICATION);plus.android.invoke(audioAttributesBuilder, 'setUsage', AudioAttributes.USAGE_ALARM);var audioAttributes = plus.android.invoke(audioAttributesBuilder, 'build');// plus.android.invoke(vibrateService, 'vibrate', [0,1000], 0, audioAttributes);// plus.android.invoke(vibrateService, 'vibrate', [0,1500,1000,1500], 0, audioAttributes);plus.android.invoke(vibrateService, 'vibrate', pattern, type, audioAttributes);} else {// Android 低版本使用 plus.device.vibrate,无法实现自定义模式vibrateTimer = setInterval(() => plus.device.vibrate(), 1000);}}} catch (e) {console.log(JOSN.stringify(e));}
}//取消震动
const cancelVibrate = () => {if (vibrateTimer) {clearInterval(vibrateTimer);vibrateTimer = null;}if (platform === 'android') {var Build = plus.android.importClass("android.os.Build");if (Build.VERSION.SDK_INT >= 26) {var vib = plus.android.runtimeMainActivity().getSystemService("vibrator");plus.android.invoke(vib, "cancel");}}}

如果感兴趣,可以到我个人博客网站,查看更多教程:Yun博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/887742.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言的qsort函数理解与使用

介绍:qsort 函数是 C 标准库中用于排序的快速排序算法函数。它的用法非常灵活,可以对任意类型的元素进行排序,只要提供了比较函数即可。 qsort 函数原型及参数解释: void qsort ( void* base, //指向要排序的数组的首元素…

#渗透测试#红蓝攻防#HW#漏洞挖掘#漏洞复现01-笑脸漏洞(vsftpd)

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…

(73)脉冲幅度调制PAM调制解调通信系统的MATLAB仿真

文章目录 前言一、PAM调制的基本原理二、PAM调制的步骤三、PAM调制示例四、PAM调制的应用五、MATLAB仿真1. 仿真代码2. 仿真结果 总结 前言 PAM(Pulse Amplitude Modulation,脉冲振幅调制)是一种模拟信号到数字信号的转换方式,它…

算法的NPU终端移植:深入探讨与实践指南

目录 ​编辑 引言 算法选择 模型压缩 权重剪枝 量化 知识蒸馏 硬件适配 指令集适配 内存管理 并行计算 性能测试 速度测试 精度测试 功耗测试 案例分析 图像识别算法的NPU移植案例 结论 引言 在人工智能技术的浪潮中,神经网络处理器(…

汽车免拆诊断案例 | 2017款捷豹F-PACE车发动机偶尔怠速不稳

故障现象  一辆2017款捷豹F-PACE车,搭载2.0 L GTDi发动机,累计行驶里程约为16万km。车主反映,车辆组合仪表上发动机故障灯点亮(图1),且发动机偶尔怠速不稳。 图1 发动机故障灯点亮 故障诊断 接车后试车…

不建模,无代码,如何快速搭建VR虚拟展厅?

不建模、无代码搭建虚拟展厅,可以借助一些专业的虚拟展厅搭建平台或工具来实现。以下是一些具体的步骤和建议: 一、选择平台或工具 首先,需要选择一个适合的平台或工具来搭建虚拟展厅。这些平台通常提供预设的展厅模板、拖拽式编辑工具和丰富…

数星星 (C++ 树状数组)

1265. 数星星 - AcWing题库 分析: 星星是按纵坐标递增给我们的,如果纵坐标相同,就按横坐标来给 所以星星是从低到高,一行一行来给的 题目要求我们去求每个等级的星星各有多少个 星星的等级由它左下角(包括左边和下…

AIGC培训讲师人工智能培训讲师叶梓Python深度学习与AIGC培训提纲

【课程时长】 8天(6小时/天) 【课程简介】 随着AIGC(基于AI的内容生成)技术的崛起,以ChatGPT为代表的人工智能技术正引领全球科技潮流。为了帮助学员更好地理解和应用这一技术,特推出了本课程。 本课程…

GB28181系列三:SIP消息格式

我的音视频/流媒体开源项目(github) GB28181系列目录 目录 一、SIP消息Header字段 二、SIP URI(URL) 三、SIP路由机制 1、路由机制介绍 2、严格路由(Strict Routing)与松散路由(Louse Routing) 3、总结 四、SIP消…

STM32-C语言基础知识

C语言基础知识 stdint.h简介 给寄存器某个位赋值 给位6赋值为1流程:先清0,再赋值 带参数的宏定义 建议使用do {…}while(0)来构造宏定义 条件编译 条件编译后面必须跟宏语句,如#if _LED_H 指针使用常见的2大问题 1、未初始化 2、越界使…

计算机网络 实验八 应用层相关协议分析

一、实验目的 熟悉CMailServer邮件服务软件和Outlook Express客户端软件的基本配置与使用;分析SMTP及POP3协议报文格式和SMTP及POP3协议的工作过程。 二、实验原理 为了观察到邮件发送的全部过程,需要在本地计算机上配置邮件服务器和客户代理。在这里我…

若依解析(一)登录认证流程

JWTSpringSecurity 6.X 实现登录 JWT token只包含uuid ,token 解析uuid,然后某个常量加UUID 从Redis缓存查询用户信息 流程图如下 感谢若依,感谢开源,能有这么好系统供我学习。 设计数据库,部门表,用户表&#xff0c…

阿里巴巴即将超越OpenAI的o1?

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

第29天 MCU入门

目录 MCU介绍 MCU的组成与作用 电子产品项目开发流程 硬件开发流程 常用元器件初步了解 硬件原理图与PCB板 常见电源符号和名称 电阻 电阻的分类 贴片电阻的封装说明: 色环电阻的计算 贴片电阻阻值计算 上拉电阻与下拉电阻 电容 电容的读数 二极管 LED 灯电路 钳位作…

Pump Science平台深度剖析:兴起、优势、影响与未来

在过去的几个月里,人们越来越关注去中心化科学(DeSci)。DeSci 是一种利用区块链技术进行科学研究的新方法。传统的科学研究经常面临所谓的“死亡之谷”,这指的是基础科学研究与成功开发和造福患者的实施之间的重要时期。DeSci 旨在…

Tülu 3:重新定义开源大模型的后训练范式

一、引言 在大型语言模型(LLM)的发展历程中,预训练阶段往往受到最多关注,动辄需要数百万美元算力投入和数万亿token的训练数据。然而,一个鲜为人知但同样关键的事实是:预训练完成的模型实际上并不能直接投…

Excel中根据某列内容拆分为工作簿

简介:根据A列的内容进行筛选,将筛选出来的数据生成一个新的工作簿(可以放到指定文件夹下),且工作簿名为筛选内容。 举例: 将上面的内容使用VBA会在当前test1下生成5个工作簿,工作簿名分别为TEST1.xls TEST2.xls TEST3…

【电子通识】“标准的标准”:国家标准GB/T 1.1-2020 标准的分类

标准是可以分类的。比如根据层次、专业、对象、目的、功能等维度进行分类。 以层次进行分类: 可以分为国际标准、区域标准、国家标准、团体标准、企业标准、行业标准 以专业进行分类: 可以分为农业、医药、卫生、劳动保护、矿业、化工、机械等等。 以对象…

【网络安全设备系列】12、态势感知

0x00 定义: 态势感知(Situation Awareness,SA)能够检测出超过20大类的云上安全风险,包括DDoS攻击、暴力破解、Web攻击、后门木马、僵尸主机、异常行为、漏洞攻击、命令与控制等。利用大数据分析技术,态势感…

数据库(MySQL黑马)

基础篇 MySQL概述 数据库概述 数据库相关概念 主流的关系型数据库管理系统 MySQL数据库的安装与启动 下载:MySQL :: MySQL Community Downloads 安装步骤 MySQL―8.0.40超详细保姆级安装教程_mysql8.0.40安装教程-CSDN博客文章浏览阅读1k次。_mysql8.0.40安装教…