uni.setClipboardData 不触发震动,感知到的震动是系统或宿主环境(iOS/Android/微信)自带反馈,代码层面无法关闭;iOS由触感反馈全局控制,Android和微信端震动亦不可通过API干预。

uni.setClipboardData 本身不触发震动,你感知到的“复制成功震动”是系统或宿主环境(iOS/Android 微信/H5 WebView)自带的反馈行为,uni-app 代码层面无法关闭它。
iOS 复制时的震动根本关不掉
iOS 上长按文字选择 → 复制,触发的是系统级触感引擎(Taptic Engine),和 uni.vibrateShort 完全无关。这个震动由「设置 → 辅助功能 → 触感反馈」全局控制,App 层无任何 API 可干预。
- 你在
@click里调用uni.setClipboardData后立刻执行uni.vibrate({ type: 'light' }),只会多震一次 - 试图用
setTimeout延迟调用、或在 Promise 回调里执行,不仅震不了,连复制都可能失败(iOS 要求同步上下文) - 删掉
manifest.json里的震动权限,对剪贴板震动零影响——因为压根没走那个权限通道
微信小程序里复制震动是微信自己决定的
微信客户端接管了整个 WebView 的剪贴板操作逻辑,震动是微信自己的 UI 行为,uni.setClipboardData 只是透传给微信原生 API,你没有入口去禁用它的震动。
- 用户需手动进「微信 → 我 → 设置 → 新消息通知 → 关闭“震动”」,否则哪怕你的 App 没调任何震动 API,微信仍可能兜底震一下
- 在
mp-weixin条件编译里加wx.vibrateShort或wx.hideLoading,只能隐藏 loading 提示,对震动无效 - 所谓“复制成功提示”是微信的 toast,
wx.hideLoading()确实能关掉它,但震动是另一套系统,完全独立
Android 厂商 ROM 的震动更不可控
小米、华为等厂商在剪贴板写入时主动调用马达服务,属于系统级行为。App 层既无权限监听,也无法拦截或覆盖。
- 部分机型(如 MIUI)允许在「设置 → 特殊权限设置 → 通知使用权 → [你的App]」里关“振动提醒”,但这只是厂商定制策略,非 Android 标准行为
-
android.permission.VIBRATE权限只控制 App 主动调用震动的能力,不影响系统剪贴板震动 - 你写的
uni.vibrate({ type: 'light' })在 Android 上会真实触发,但和复制震动时间错开,反而让用户感觉“震了两次”
真正能动手的地方只有用户设备上的那几个开关:iOS 的触感反馈、微信的通知震动、厂商 ROM 的剪贴板振动选项。这些路径藏得深,且各平台互不兼容——别在代码里白费劲了。


















