我有这种振动方法,可以让我的应用程序按照我想要的方式在手机上振动(Android 6 API23)。
但是,当我的 friend 在他的手机(Android 9)上尝试时,它不起作用。它不断地以错误的方式振动,他甚至无法使用应用程序中的按钮将其关闭。
如何使振动在较新版本的 Android 上完全相同?
long[] pattern = { 0, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000};
这是振动代码
v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Log.d("VIBRATE ===>", "I AM VIBRATING");
// v.vibrate(VibrationEffect.createWaveform(pattern, 0)); This did not work
} else {
Log.d("VIBRATE ====>", "I AM VIBRATING");
v.vibrate(pattern , 0); //This do work on Android 6
}
这是停止振动的方法。 (同样适用于 Android 6)
public static void stopVibration() {
v.cancel();
}
编辑我的尝试
所以我希望它振动 1 秒,暂停 1 秒,振动 1 秒,依此类推,直到按下按钮。您认为这段代码适用于 Android 9(或者我猜 API > 26)吗?
long[] mVibratePattern = new long[]{ 0, 1000, 1000, 1000, 1000, 1000, 1000, 1000};
int[] mAmplitudes = new int[]{0, 255, 255, 255, 255, 255, 255, 255};
v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Log.d("VIBRATE ===>", "I AM VIBRATING");
VibrationEffect effect = VibrationEffect.createWaveform(mVibratePattern, mAmplitudes, 0); //Will this work on Android 9?
v.vibrate(effect);
} else {
Log.d("VIBRATE ====>", "I AM VIBRATING");
v.vibrate(pattern , 0); //This do work on Android 6
}
最佳答案
所以我拿到了一部 Android 9 手机,这使得振动在 Android 9 上也能正常工作。
long[] pattern = { 0, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000};
int[] mAmplitudes = new int[]{0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0};
v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Log.d("VIBRATE ===>", "I AM VIBRATING");
VibrationEffect effect = VibrationEffect.createWaveform(pattern, mAmplitudes, 0); //This do work on Android 9
v.vibrate(effect);
} else {
Log.d("VIBRATE ====>", "I AM VIBRATING");
v.vibrate(pattern , 0); //This do work on Android 6
}
关于java - Android 9 上的振动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56837969/