控制Android手机的振动强度?可能吗?

时间:2010-05-22 12:20:18

标签: java android

我正在开发一款游戏。其中,我想为不同的事件设置不同的振动强度。我只想知道它是否真的可以控制振动强度和持续时间。任何建议或参考链接都可能非常有用。提前谢谢。

4 个答案:

答案 0 :(得分:10)

我做了一个简单的技巧,以某种方式减少振动的强度。我的想法是将振动间隔与静音间隔交错。如果你有一毫秒的振动然后一秒钟的静音等等,它似乎是一个恒定的振动但比正常弱。您可以尝试增加静音间隔,使振动更弱。这是代码示例:

int strong_vibration = 30; //vibrate with a full power for 30 secs
int interval = 1000;
int dot = 1; //one millisecond of vibration
int short_gap = 1; //one millisecond of break - could be more to weaken the vibration
long[] pattern = {
        0,  // Start immediately
        strong_vibration, 
        interval,
        // 15 vibrations and 15 gaps = 30millis
        dot, short_gap, dot, short_gap, dot, short_gap, dot, short_gap, dot, short_gap, dot, short_gap, dot, short_gap, dot, short_gap, dot, short_gap, dot, short_gap, dot, short_gap, dot, short_gap, dot, short_gap, dot, short_gap, dot, short_gap, //yeah I know it doesn't look good, but it's just an example. you can write some code to generate such pattern. 
    };

答案 1 :(得分:9)

我认为这取决于强度的含义。你可以控制振动的模式和长度,但我认为你不能让它振动“更强”。

http://developer.android.com/reference/android/os/Vibrator.html

答案 2 :(得分:2)

PWM可用于产生各种脉冲宽度的振动模式,从而降低振动电机的平均电压(从而减少振动输出)。

我发布了一个简单的概念验证方法here。此方法将生成具有指定强度和持续时间的模式。该方法的过渡并不是非常线性的,所以我发布了一笔赏金以希望获得一些替代建议。当我有更好的算法时会更新。

答案 3 :(得分:1)

这可以帮助您,但它仅适用于API级别26或更高级别。

public void vibrate(View view) {
    Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {

        long[] wave_time = {0, 100, 0, 100, 0, 100, 0, 100, 0, 100};
        int[] wave_ampl = {0, 50, 0, 100, 0, 150, 0, 200, 0, 255};

        VibrationEffect vibrationEffect = null;
        vibrationEffect = VibrationEffect.createWaveform(wave_time, wave_ampl, -1);
        vibrator.vibrate(vibrationEffect);
    }

}

此处wave_time数组表示两种类型的时间:

  1. 它应该空闲的时间(第0个索引,第2个索引,.etc)
  2. 振动的时间(第一指数,第三指数,.etc)
  3. wave_ampl数组表示振动w.r.t wave_time数组的强度。

    说明:

    手机等待 0 ms(wave_time的第0个索引)并开始振动 100 ms(wave_time的第一个索引) 50 wave_ampl的第一个指数)。

    类似地,手机振动 100 ms(wave_time的第三个指数),强度 100 wave_ampl的第三个指数)。< / p>

    android中的最大强度为 255

    Reference