Ответ 1
Амплитуда - это значение int. Его сила вибрации. Это должно быть значение от 1 до 255 или DEFAULT_AMPLITUDE
, которое равно -1.
Вы можете использовать его как VibrationEffect.DEFAULT_AMPLITUDE
Подробнее здесь
Я использую Android VIBRATOR_SERVICE
для получения тактической обратной связи для нажатия кнопки.
((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(300);
Android Studio сообщит мне, что метод vibrate(interval)
устарел. Я должен использовать VibrationEffect
для API > 23.
Итак, я использовал метод VibrationEffect
createOneShot
, который принимает 2 параметра: интервал и амплитуду.
Я попытался найти его, но не понял, что передать как amplitude
, кто-нибудь понял, как его использовать?
Обновление Добавленный код
// Vibrate for 150 milliseconds
private void shakeItBaby() {
if (Build.VERSION.SDK_INT >= 26) {
((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(VibrationEffect.createOneShot(150,10));
} else {
((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(150);
}
}
Амплитуда - это значение int. Его сила вибрации. Это должно быть значение от 1 до 255 или DEFAULT_AMPLITUDE
, которое равно -1.
Вы можете использовать его как VibrationEffect.DEFAULT_AMPLITUDE
Подробнее здесь
с котлин
private fun vibrate(){
val vibrator = context.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
vibrator.vibrate(VibrationEffect.createOneShot(200, VibrationEffect.DEFAULT_AMPLITUDE))
} else {
vibrator.vibrate(200)
}
}
Вы можете использовать это для тактической обратной связи (вибрации):
view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS);
В HapticFeedbackConstants
имеются другие константы, такие как VIRTUAL_KEY
, KEYBOARD_TAP
...
Эта библиотека может вам помочь: https://github.com/josephrubin/Rumble-4-Android
Все, что вам нужно, это Rumble.once(150);
Он обрабатывает версии API для вас.
Я просто наткнулся на это и обнаружил, что VibrationEffect.createWaveform()
основном использует тот же long[]
-pattern, что и старый vibrate()
.
Из-за этого вы можете повторно использовать существующий шаблон следующим образом (это функция расширения Kotlin):
fun Context.vibrate(pattern: LongArray) {
val vibrator =
applicationContext.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator? ?: return
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
vibrator.vibrate(
VibrationEffect.createWaveform(pattern, VibrationEffect.DEFAULT_AMPLITUDE)
)
} else {
@Suppress("DEPRECATION")
vibrator.vibrate(pattern, -1)
}
}
И вместо VibrationEffect.createOneShot()
вы также можете использовать шаблон (например, longArrayOf(0, 150)
), поэтому нет необходимости использовать другие функции.
Открыть Управление пакетами NuGet
Поиск и установка Xamarin.Essentials
try {
var duration = TimeSpan.FromMilliseconds(300);
Vibration.Vibrate(duration);
}
catch (FeatureNotSupportedException ex){}
catch (Exception ex){}
// Vibrates the device for 100 milliseconds.
fun vibrateDevice(context: Context) {
val vibrator = getSystemService(context, Vibrator::class.java)
vibrator?.let {
if (Build.VERSION.SDK_INT >= 26) {
it.vibrate(VibrationEffect.createOneShot(100, VibrationEffect.DEFAULT_AMPLITUDE))
} else {
@Suppress("DEPRECATION")
it.vibrate(100)
}
}
}
Вызовите функцию следующим образом:
vibrateDevice(requireContext())
Убедитесь, что вы добавили разрешение в AndroidManifest.xml следующим образом:
<uses-permission android:name="android.permission.VIBRATE"/>
Обратите внимание, что вам не нужно запрашивать разрешение во время выполнения для использования вибрации.
Вам нужно подавить устаревание в предложении else
, потому что предупреждение от более нового SDK.