getParcelableExtra(), getSerializable() is deprecated in Android 13

지프치프·2023년 4월 23일
0

Android

목록 보기
63/85
post-thumbnail

“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”


개요

개인 프로젝트를 하고있던 중 공유 기능이 필요해서
이미지 공유 기능을 작성하고 있었는데 낯익은 실선 하나를 발견했다.

아..

하지만 놀랄 것 없다.
똑같은 이름에 매개변수가 하나 더 추가된 형태로 대체되었기 때문이다.

public T getParcelableExtra (String name, Class<T> clazz)

// 기존 방식
val uri = intent.getParcelableExtra(Intent.EXTRA_STREAM) as? Uri

// Android 13 이상
val uri = intent.getParcelableExtra(Intent.EXTRA_STREAM, Uri::class.java)

기존에는 <T> 제네릭 타입을 반환하여 캐스팅을 해주어야했던 과정을 생략할 수 있도록 바뀐 거 같다.
매개변수에 캐스팅 하고싶은 클래스를 넣어주면 해당 클래스로 반환 받을 수 있어
캐스팅 과정 생략이 가능하다.

안드로이드 버전을 고려해서 버전 분기한 코드는 아래와 같다.

val uri = if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
	intent.getParcelableExtra(Intent.EXTRA_STREAM, Uri::class.java)
} else {
	intent.getParcelableExtra(Intent.EXTRA_STREAM) as? Uri
}

개인적으로 공부했던 것을 바탕으로 작성하다보니
잘못된 정보가 있을수도 있습니다.
인지하게 되면 추후 수정하겠습니다.
피드백은 언제나 환영합니다.
읽어주셔서 감사합니다.

profile
지프처럼 거침없는 개발을 하고싶은 개발자

0개의 댓글