我正在开发一款游戏。其中,我想为不同的事件设置不同的振动强度。我只想知道它是否真的可以控制振动强度和持续时间。任何建议或参考链接都可能非常有用。提前谢谢。
答案 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
数组表示两种类型的时间:
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 。