【问题标题】:Why does my phone vibrate indefinitely?为什么我的手机会无限振动?
【发布时间】:2015-01-12 20:23:48
【问题描述】:

我正在尝试在手机振动时使用振动模式。我正在使用:

Vibrator v = (Vibrator) this.getSystemService(Context.VIBRATOR_SERVICE);
                // Vibrate for 500 milliseconds
                long[] longs = { 2, 0, 0, 0, 2, 0 , 0, 0, 2 };
                v.vibrate(longs, 1);

它只是不停地振动。

  1. 如果我使用v.vibrate(longs, -1);,它根本不会振动。
  2. 如果我使用v.vibrate(longs, 0);,它根本不会振动。
  3. 如果我使用 v.vibrate(longs, 2); 或任何大于 1 的数字,它会无限振动。
  4. 如果我将 long 值更改为更高或更低,则没有区别。

我已经阅读了documentation 和一些tutorials,我不认为我在这里做错了什么。为什么它不能正常振动?

注意:我使用的其他应用程序可以正常振动,所以我知道这不是我的手机的问题。

【问题讨论】:

  • 我正在添加自己的答案,因为我找到了解决方案。不过我不明白,所以如果有人可以添加对为什么此代码的解释,我将按预期添加作品,那就太好了。
  • 我看不到评论// Vibrate for 500 milliseconds 和代码之间的关系。
  • @njzk2 这无关紧要。我只是在稍微更改代码后没有删除评论。

标签: java android


【解决方案1】:

您应该阅读vibrate() 的文档。

使用2, 0, 0, 0, 2, 0 , 0, 0, 2,您在说:“等待 2 毫秒,振动 0 毫秒,等待 0 毫秒,振动 0 毫秒,等待 2 毫秒,振动 0 毫秒,等待 0 毫秒,振动0 毫秒,等待 2 毫秒”。显然,这种模式永远不会振动,除非您重复该模式(其间隔数为奇数)。

当您将 -1 以外的任何值作为第二个参数传递时,模式将使用第二个参数作为开始重复的模式的索引来重复。因为你似乎从来没有打电话给v.cancel(),所以这个重复永远不会结束,导致无休止的振动(因为在重复的某个时刻,你会有非0的振动间隔)。

【讨论】:

  • 谢谢@cybersam,我最初确实阅读了文档。不知道我是怎么错过他们谈论开关的部分的。
【解决方案2】:

为什么不能正常振动?

嗯……

首先,零毫秒是一个非常短的时间。用户不会注意到零毫秒内发生的振动,用户也不会注意到零毫秒内发生的振动之间的间隙。

其次,两毫秒是很短的时间。您的整个模式每次传递需要 6 毫秒(重复值为 0),或第二次和后续传递需要 4 毫秒(重复值为 1,因为这会跳过模式的第一个元素,它是您的三个两毫​​秒值之一)。每秒有数百个这样的模式,用户无法辨别。

我建议您去掉零,其余部分使用合理的毫秒数。这是在cybersam 建议最终调用cancel() 并考虑您的模式中是否需要偶数或奇数元素的建议之上。

【讨论】:

    【解决方案3】:

    this page 上第二个答案的代码对我有用。它以一种模式振动,然后在模式完成后停止:

    // Get instance of Vibrator from current Context
    Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
    
    // Start without a delay
    // Vibrate for 100 milliseconds
    // Sleep for 1000 milliseconds
    long[] pattern = {0, 100, 1000};
    
    // The '0' here means to repeat indefinitely
    // '0' is actually the index at which the pattern keeps repeating from (the start)
    // To repeat the pattern from any other point, you could increase the index, e.g. '1'
    v.vibrate(pattern, 0);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-15
      • 1970-01-01
      • 1970-01-01
      • 2015-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多