‘VIBRATOR_SERVICE: String’ is deprecated. Deprecated in Java

以下の様なコードを書いているとdeprecated warningが出る。

val vibrator = context.getSystemService(Context.VIBRATOR_SERVICE) as? Vibrator

メッセージは

'VIBRATOR_SERVICE: String' is deprecated. Deprecated in Java

で、Context.VIBRATOR_SERVICEはdeprecatedになったので置き換えてくれという内容。

taget SDKを31以降にしていると発生する。

対処方法

SDK version 31以降ではVibratorManager 経由でVibratorのインスタンスを取得する。

val vibratorManager = context.getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as? VibratorManager
val vibrator = vibratorManager?.defaultVibrator

SDK version 30以前も対応するのであればバージョンで分岐する。

val vibrator = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
    val vibratorManager = context.getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as? VibratorManager
    vibratorManager?.defaultVibrator
} else {
    @Suppress("DEPRECATION")
    context.getSystemService(Context.VIBRATOR_SERVICE) as? Vibrator
}