Android SDKが33以降ではgetSerializableExtra等が非推奨になった件への対応
Android TVのサンプルプログラム(Android Studioが勝手に作ってくれるもの)の中に
val (_, title, description, _, _, videoUrl) =
activity?.intent?.getSerializableExtra(DetailsActivity.MOVIE) as Movie
という一文がある。このgetSerializableExtraに限らず、Serialize系がAndroid SDKが33以降で非推奨になった。
対応は簡単だがBuild.VERSION_CODES.TIRAMISUの条件が付く。それで条件分岐を作る
val movie: Movie? = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
activity?.intent?.getSerializableExtra(DetailsActivity.MOVIE, Movie::class.java)
} else {
activity?.intent?.extras?.getSerializable(DetailsActivity.MOVIE)
} as Movie?
val (_, title, description, _, _, videoUrl) = movie ?: "Default Title" as Movie
こんな感じだ。
as Movieで入れているものに対してMovie::class.javaを引数とした新しいタイプのType-Safeバージョンを使う。もちろんMovieの部分は適宜対応するものに変える必要がある。
また元はNullableでなかったものをNullableにしたので、エルビス演算子+”Default Title”を追加した。
とりあえずSerialize系はこれで頑張ってみる。