build.gradle 에서 아래와 같이 설정했을 경우 targetSDK를 31로 설정했으므로 31 버전의 API로 앱을 개발한다는 의미이다. minSDK는 21이므로 21버전 이상의 기기에서만 이 앱을 설치할 수 있다.
minSDK 21
targetSDK 31
따라서 이 앱에서 minSDK 보다 상위버전에서 제공하는 API를 사용할 경우 호환성을 고려해야 한다.
Notification 클래스를 확인해보면 오른쪽에 API 버전 1에서 추가되었다는 것을 알 수 있다. 따라서 호환성 문제가 발생하지 않는다.
하지만 Notification.CallStyle 클래스는 API 버전 31에서 추가되었기 때문에 minSDK 가 21일 경우, 호환성 문제가 발생하게 된다.
추가된 API 버전에 상위 버전에서는 호환성 문제가 발생하지 않고, 하위 버전에서만 문제가 발생한다.
@RequiresApi(Build.VERSION_CODES.S)
fun noti(){
// 생략...
val builder: Notification.Builder = Notification.Builder(this, "1")
.setStyle(
Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent)
)
// 생략...
}
@TargetApi(Build.VERSION_CODES.S)
fun noti(){
// 생략...
val builder: Notification.Builder = Notification.Builder(this, "1")
.setStyle(
Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent)
)
// 생략...
}
if( Build.VERSION.SDK_INT >= Build.VERSION_CODES.S){
val builder: Notification.Builder = Notification.Builder(this, "1")
.setStyle(
Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent)
)
}
Build.VERSION.SDK_INT는 앱이 실행되는 기기의 API 레벨이다.