VibrationEffect 不会改变我的 Galaxy S8 的震动幅度
VibrationEffect doesn't change the amplitude of the vibes on my Galaxy S8
这是代码:
public class Vibrate extends AppCompatActivity {
long[] timings = {1000, 1000, 1000, 1000};
int[] amplitudes = {0, 5, 250, 5};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_vibrate);
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Vibrate for 500 milliseconds
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
v.vibrate(VibrationEffect.createWaveform(timings, amplitudes, 0));
} else {
//deprecated in API 26
v.vibrate(500);
}
}
}
我尝试了波形效果,但是当我 运行 它在我的 Galaxy S8 上时,所有的振动感觉都一样。
怎么回事?
5的振幅和250的振幅怎么可能引起相同的振动?
所以我做了一些挖掘,现在谜团解开了,
如果有人在这个问题上遇到困难,您应该知道并非所有支持 VibrationEffect (API>=26) 的设备实际上都具有振幅控制硬件。
要检查您的设备是否具有振幅控制,请使用 hasAmplitudeControl
方法:
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
Log.i("================", "This device has amplitude control: " + v.hasAmplitudeControl());
这是代码:
public class Vibrate extends AppCompatActivity {
long[] timings = {1000, 1000, 1000, 1000};
int[] amplitudes = {0, 5, 250, 5};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_vibrate);
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Vibrate for 500 milliseconds
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
v.vibrate(VibrationEffect.createWaveform(timings, amplitudes, 0));
} else {
//deprecated in API 26
v.vibrate(500);
}
}
}
我尝试了波形效果,但是当我 运行 它在我的 Galaxy S8 上时,所有的振动感觉都一样。
怎么回事?
5的振幅和250的振幅怎么可能引起相同的振动?
所以我做了一些挖掘,现在谜团解开了,
如果有人在这个问题上遇到困难,您应该知道并非所有支持 VibrationEffect (API>=26) 的设备实际上都具有振幅控制硬件。
要检查您的设备是否具有振幅控制,请使用 hasAmplitudeControl
方法:
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
Log.i("================", "This device has amplitude control: " + v.hasAmplitudeControl());