You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Vibrator设置震动模式重复3次但设备无限震动如何解决

问题原因

你对Vibrator.vibrate()方法的第二个参数用法理解有误:

  • 该参数不是重复执行的次数,而是指定循环震动时,从pattern数组的哪个下标位置开始重复
  • 当传入≥0的数值时,系统会无限循环震动,只有传入-1时才代表只执行一次pattern,不循环
    你现在传入了3,系统会一直从pattern的索引3位置开始循环执行,所以会出现无限震动的问题。

解决方法

要实现pattern重复3次、总震动6次的效果,有两种常用方案:

方案1:直接构造包含完整3次循环的pattern数组

你的原始pattern单次包含2次震动(2000ms震、1000ms停、2000ms震、1000ms停),重复3次直接拼接数组即可:

private void deviceVibration (){
    // 拼接3次完整的震动停顿逻辑,开头保留0ms启动延迟
    long[] pattern = {0, 2000, 1000, 2000, 1000, 2000, 1000, 2000, 1000, 2000, 1000, 2000, 1000};
    // 第二个参数传-1,只执行一次完整pattern就自动停止
    vibrator.vibrate(pattern, -1);
}

方案2:用延时任务控制震动停止(适配长pattern场景)

如果pattern本身很长不想拼接,可以计算3次循环的总时长,到点后主动取消震动:

private void deviceVibration (){
    long[] pattern = {0, 2000, 1000, 2000,1000};
    int repeatCount = 3;
    // 计算单次pattern总时长:2000+1000+2000+1000=6000ms
    long totalDuration = 6000 * repeatCount;
    // 从pattern起始位置开始循环震动
    vibrator.vibrate(pattern,0);
    // 达到总时长后取消震动
    new Handler(Looper.getMainLooper()).postDelayed(() -> {
        vibrator.cancel();
    }, totalDuration);
}

注意事项

  • 需要在AndroidManifest.xml中申请震动权限:<uses-permission android:name="android.permission.VIBRATE" />
  • Android 12及以上系统推荐使用VibratorManager替代旧的Vibrator接口,核心逻辑一致

内容的提问来源于stack exchange,提问作者zon1k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 02:39:03