Context.VIBRATOR が Deprecated に
API Level 31 (Android 12) より getSystemService(Context.VIBRATOR) が Deprecated になりました。
以降は同じく API Level 31 で追加された getSystemService(Context.VIBRATOR_MANAGER_SERVICE) の使用が推奨されます。
Vibrator Manager の使い方
AndroidManifest.xml に次のパーミッションを追加します。
<uses-permission android:name="android.permission.VIBRATE"/>
つづいて MainActivity.kt に処理を記述します。
サンプルではこまかな点まで考慮しておりませんのでご了承ください。
class MainActivity : AppCompatActivity() {
@RequiresApi(Build.VERSION_CODES.S)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val vibratorManager = getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as VibratorManager
val vibrationEffect = VibrationEffect.createWaveform(
longArrayOf(500L, 500L),
intArrayOf(VibrationEffect.DEFAULT_AMPLITUDE, 0),
3
)
val combinedVibration = CombinedVibration.createParallel(vibrationEffect)
findViewById<Button>(R.id.Button).setOnClickListener { vibratorManager.vibrate(combinedVibration) }
}
}
従来の Vibrator を使用する方法との違いは、CombinedVibration が加えられる点です。
公式リファレンス によると CombinedVibration は API Level 31 で追加された振動機能全般を管理するためのクラスとなっています。
従来の振動機能に加え、触覚フィードバックも一元化して扱いやすくするのが狙いなようです。
その点を除くと、 VibrationEffect オブジェクトを生成し VibratorManager.vibrate() に渡すという基本サイクルは変わりません。
実行中のvibratorをすべて停止するには、 VibratorManager.cancel() を使用します。