MAUI如何实现振动效果 MAUI Vibrate功能使用
技术百科
幻夢星雲
发布时间:2026-01-27
浏览: 次 MAUI 中振动功能依赖 Microsoft.Maui.Devices.Vibration 类,支持短震(15ms)、长震(400ms)和自定义时长,但 iOS 仅支持两种模式,Android/HarmonyOS 更灵活;需手动配置平台权限,调用前应检查 IsSupported 和 IsVibrating 状态,并可结合 IHapticFeedback 实现精细化触感反馈。
MAUI 中实现振动效果主要依靠 Microsoft.Maui.Devices.Vibration 类,它提供跨平台的统一 API,无需手动处理 Android/iOS/HarmonyOS 权限细节(但需注意平台实际限制)。
基础振动调用
MAUI 的振动功能简洁直接,支持短震、长震和自定义时长三种方式:
-
短震动(约15ms):适合点击反馈,调用
Vibration.Vibrate()不传参或传空时长 -
长震动(约400ms):用于重要提醒,使用
Vibration.Vibrate(TimeSpan.FromMilliseconds(400)) -
自定义震动(如200ms):传入明确时长,例如
Vibration.Vibrate(TimeSpan.FromMilliseconds(200))
注意:iOS 上所有自定义时长都会被系统强制转为短震或长震两种模式之一,无法精确控制毫秒级;Android 和 HarmonyOS 支持更灵活的时长(但受系统策略限制,超1000ms可能被截断)。
权限与平台适配
MAUI 项目本身不自动申请振动权限,需手动配置:
-
Android:在
A中添加
ndroidManifest.xml
- iOS:无需额外权限声明,但需确保设备未开启“减弱触感”(Settings → Accessibility → Touch → Reduce Motion & Haptics)
-
HarmonyOS:在
module.json5中声明"ohos.permission.VIBRATE",且需调用vibrator.startVibration()等原生能力(MAUI 当前暂未内置 HarmonyOS 振动支持,需通过@kit.SensorServiceKit插件桥接)
安全调用与状态检查
避免运行时异常,建议每次振动前检查设备是否支持并已启用:
- 用
Vibration.IsSupported判断当前平台是否支持振动 - 用
Vibration.IsVibrating避免重复触发(尤其在按钮快速连点场景) - 可封装防抖逻辑,例如:300ms 内只允许一次震动
示例代码片段:
if (Vibration.IsSupported && !Vibration.IsVibrating)Vibration.Vibrate(TimeSpan.FromMilliseconds(150));
触觉反馈(Haptic Feedback)进阶用法
若需更精细的反馈(如键盘敲击、滑动确认),MAUI 还提供 IHapticFeedback 接口:
- 获取默认实例:
HapticFeedback.Default - 支持预设类型:
HapticFeedbackType.Click、.HeavyClick、.Selection等 - 调用方式:
HapticFeedback.Default.Perform(HapticFeedbackType.Click)
该接口在 iOS 和 Android 上会映射为系统原生触感效果,比纯振动更自然,但不适用于所有场景(比如通知类提醒仍推荐用 Vibration)。
基本上就这些。MAUI 的振动功能开箱即用,关键在权限补全、平台差异识别和合理封装。
# 时长
# 但不
# 进阶
# 适用于
# 三种
# 两种
# 自定义
# 更灵活
# microsoft
# default
# js
# json
# if
# xml
# 接口
# access
# red
# 封装
# ios
# android
# 并可
# 触感
# harmonyos
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Python与Docker容器化部署实战_镜像构建
- ACF 教程:正确更新嵌套在多层 Group 字段
- Win11怎么设置任务栏图标大小_Windows1
- C++如何使用std::async进行异步编程?(
- Win11怎么设置虚拟内存_Windows 11优
- Python爬虫项目实战教程_Scrapy抓取与存
- 如何使用Golang template生成文本模板
- C++ STL算法库怎么用?C++常用算法函数(s
- Windows10如何更改开机密码_Win10登录
- c++如何判断文件是否存在_c++ filesys
- Win11怎么退出微软账户_切换Win11为本地账
- 如何在 Django 中安全修改用户密码而不使会话
- Python高性能计算项目教程_NumPyCyth
- Win11开机Logo怎么换_Win11自定义启动
- Windows10如何重置此电脑_Windows1
- Win11怎么检查TPM2.0模块_Windows
- Win11怎么开启剪贴板历史记录_Windows1
- Win11怎么恢复出厂设置_Win11重置此电脑保
- 如何使用Golang理解结构体指针方法接收者_Go
- c++中如何进行二进制文件读写_c++ read与
- Python大型项目拆分策略_模块化解析【教程】
- Windows系统时间服务错误_W32Time服务
- SAX解析器是什么,它与DOM在处理大型XML文件
- MAC如何修改默认应用程序_MAC文件后缀关联设置
- c++ stringstream用法详解_c++字
- Win10电脑怎么设置网络名称_Windows10
- LINUX怎么查看进程_LINUX ps命令查看运
- Windows10电脑怎么设置电源按钮_Win10
- 如何使用Golang搭建本地API测试环境_快速验
- c++中的std::conjunction和std
- c# 在ASP.NET Core中管理和取消后台任
- 如何使用Golang实现聊天室消息存档_存储聊天记
- 如何在 Python 测试中动态配置 @backo
- Windows10系统怎么查看显卡型号_Win10
- Win11怎样安装钉钉客户端_Win11安装钉钉教
- TestNG的testng.xml配置文件怎么写
- PHP 中 require() 语句返回值的用法详
- 如何在Golang中使用container/hea
- 如何使用Golang包导出规则_控制函数和变量可见
- php下载安装包太大怎么下载_分卷压缩下载方法【教
- Python代码测试策略_质量保障解析【教程】
- 零基础学会Python自动化办公_高效处理Exce
- Win11怎样安装企业微信_Win11安装企业微信
- windows系统如何安装cab更新补丁_wind
- php在Linux怎么部署_LNMP环境搭建PHP
- Windows服务持续崩溃怎样修复_系统服务保护机
- Python安全爬虫设计_IP代理池与验证码识别策
- Win10电脑怎么设置休眠快捷键_Windows1
- LINUX如何查看文件类型_Linux中file命
- Win11怎么设置虚拟键盘_打开Win11屏幕键盘


QQ客服