在安卓手机中控制震动强度是否可行?

8

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

4个回答

10

我想到了一个简单的方法,来减轻振动的强度。我的想法是在振动间隔中插入静音时间间隔。如果你有1毫秒的振动,然后1秒的静默,如此循环,它看起来像是一个持续的振动,但比正常情况下要弱。你可以尝试增加静默时间间隔,使振动更弱。以下是代码示例:

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. 
    };

你知道这样做对设备有什么不良影响吗? - Script Kitty

10

非常感谢你,Josh。我希望他们能尽快为我们提供控制强度的手段。 - Mithraa
2
硬件不会做这个。 - hackbod
2
我认为你不会很快看到那种功能的添加。手机震动的工作方式比你所期望的要简单得多。http://electronics.howstuffworks.com/question368.htm - Josh
3
我有一部运行Android 5.0.1的三星Galaxy S4手机,它具有振动强度设置。也许这是设备特定的?如果是这样,那么一定有一个API允许这种功能。有人有任何想法吗? - Marjan Slavkovski

2

这可能对你有所帮助,但它只适用于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索引等)
  2. 应该振动的时间(1索引,3索引等)
wave_ampl数组表示振动强度相对于wave_time数组。
解释:
手机等待0毫秒(wave_time的0索引),然后开始振动100毫秒(wave_time的1索引),强度为50wave_ampl的1索引)。
类似地,手机以强度为100wave_ampl的3索引)的强度振动100毫秒(wave_time的3索引)。
在Android中,最大强度为255
参考: Reference

2

PWM 可以用于产生不同脉冲宽度的振动模式,从而降低马达的平均电压(因此振动输出较弱)。

我在 这里 发布了一个简单的概念证明方法。该方法将生成指定强度和持续时间的模式。该方法中的转换并不是完全线性的,因此我发布了一份悬赏,希望能得到其他建议。有更好的算法后我会进行更新。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接