AndroidのVIBRATOR_SERVICE
を使用して、ボタンタッチの触覚フィードバックを提供しています。
((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(300);
Android Studioでは、メソッドvibrate(interval)
が推奨されないという警告が表示されます。API> 23にはVibrationEffect
を使用する必要があります。
そこで、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);
}
}
振幅は整数値です。その振動の強さ。これは、1〜255の値、または-1であるDEFAULT_AMPLITUDE
でなければなりません。
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()
が基本的に古いvibrate()
と同じlong[]
-パターンを使用していることを発見しました。
このため、次のように既存のパターンを再利用できます(これは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)
)も使用できるため、異なる関数を使用する必要はありません。