강의에서 사용하기 위해서 정리한 글입니다. 내용에 오류가 있을수 있습니다.

Toast Icon
Toast API 에는 변경사항이 없는데 출력되는 모습에 변화
Toast 문자열에 기본 App Icon 이미지 출력
WindowMetrics
디바이스 사이즈 정보 획득에 사용되었던 DisplayMetrics 는 deprecation
WindowMetrics 를 사용할 것을 권장
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
val windowMetrics: WindowMetrics = windowManager.currentWindowMetrics
val insets: Insets = windowMetrics.windowInsets
.getInsetsIgnoringVisibility(WindowInsets.Type.systemBars())
windowMetrics.bounds.width() - insets.left - insets.right
binding.textView2.text = """
insets.left : ${insets.left}
insets.right : ${insets.right}
insets.top : ${insets.top}
insets.bottom : ${insets.bottom}
windowMetrics.bounds.width() : ${windowMetrics.bounds.width()}
windowMetrics.bounds.height() : ${windowMetrics.bounds.height()}
windowMetrics.bounds.left : ${windowMetrics.bounds.left}
windowMetrics.bounds.right : ${windowMetrics.bounds.right}
windowMetrics.bounds.top : ${windowMetrics.bounds.top}
windowMetrics.bounds.bottom : ${windowMetrics.bounds.bottom}
window width : ${windowMetrics.bounds.width() - insets.left - insets.right}
"""
} else {
val display = windowManager.defaultDisplay
val displayMetrics = DisplayMetrics()
display?.getRealMetrics(displayMetrics)
binding.textView2.text = """
widthPixels : ${displayMetrics.widthPixels}
heightPixels : ${displayMetrics.heightPixels}
densityDpi : ${displayMetrics.densityDpi}
density : ${displayMetrics.density}
scaledDensity : ${displayMetrics.scaledDensity}
xdpi : ${displayMetrics.xdpi}
ydpi : ${displayMetrics.ydpi}
"""
}
VibratorManager
Vibrator deprecation
VibratorManager 사용 권장
val vibrator = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
val vibratorManager = this.getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as VibratorManager
vibratorManager.defaultVibrator;
} else {
getSystemService(VIBRATOR_SERVICE) as Vibrator
}
PendingIntent flag 값 지정
PendingIntent 에 flag 값을 immutable 혹은 mutable 둘중 하나를 주어야 함.
안그러면 런타임 에러발생
val intent = Intent(this, DetailActivity::class.java)
val pendingIntent =
PendingIntent.getActivity(this, 10, intent,
PendingIntent.FLAG_IMMUTABLE)
builder.setContentIntent(pendingIntent)
Activity Lifecycle 변경
12 버전부터 root activity 의 경우 back button 에 의해 종료되지 않는다.
onStop() 까지 호출되고 onDestory() 가 호출되지 않는다.
물론 root activity 가 아니면 back button 에 의해 종료된다.
finish() 에 의한 종료는 root activity 도 onDestory 호출된다.
TelephonyCallback
PhoneStateListener deprecated
TelephonyCallback 으로 대체
TelephonyManager 에게 TelephonyCallback 을 구현한 객체를 등록하면 상태 변화가 발생했을 때 TelephonyCallback 의 함수가 자동 호출
telephonyManager = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
telephonyManager.registerTelephonyCallback(
mainExecutor,
object : TelephonyCallback(), TelephonyCallback.CallStateListener {
override fun onCallStateChanged(state: Int) {
when (state) {
TelephonyManager.CALL_STATE_IDLE -> {
Log.d("kkang", "IDLE....")
}
TelephonyManager.CALL_STATE_OFFHOOK -> {
Log.d("kkang", "OFFHOOK....")
}
TelephonyManager.CALL_STATE_RINGING -> {
Log.d("kkang", "RINGING....")
}
}
}
})
}
TelephonyManager 에 TelephonyCallback 등록은 registerTelephonyCallback() 함수를 이용해 등록하며 등록되는 객체는 TelephonyCallback 을 상속받은 객체이어야 한다.
그리고 위의 코드처럼 TelephonyCallback.CallStateListener 라는 인터페이스를 구현한 객체이어야 하는데 인터페이스는 감지하고자 하는 상태에 따라 여러가지가 준비되어 있어야 한다.
위의 코드에서 이용한 TelephonyCallback.CallStateListener 는 전화가 걸려오는 상황을 감지할 때 사용되는 인터페이스이다.
TelephonyCallback.CallStateListener 이외에 다양한 상황 감지를 위해 여러 인터페이스들이 준비되어 있으며 대표적인 것들을 소개하면 아래와 같다.
TelephonyCallback.CellLocationListener – cell 위치 변경 감지
TelephonyCallback.ServiceStateListener – 서비스 상태 변경 감지
TelephonyCallback.SignalStrengthsListener – 신호세기 변경 감지
TelephonyCallback.DataActivityListener – 데이터 송수신 상태 변경 감지
TelephonyCallback.DataConnectionStateListener – 데이터 커넥션 상태 변경 감지
TelephonyCallback.CallStateListener – 전화 상태 변경 감지
Location 퍼미션
12 버전부터 ACCESS_FINE_LOCATION 을 걸려면 ACCESS_COARSE_LOCATION 을 같이 걸어줘야 한다.
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

'Android' 카테고리의 다른 글
[Doit 깡샘의 안드로이드 앱 프로그래밍 with 코틀린] 정리 2 - 안드로이드 소개 (0) | 2022.02.28 |
---|---|
[Doit 깡샘의 안드로이드 앱 프로그래밍 with 코틀린] 정리 1 - 안드로이드 스튜디오 설치하기 (0) | 2022.02.28 |
Android Architecture Component + Coroutine + Hilt + Clean Architecture 교육 (0) | 2021.09.30 |
ViewPager Back Button 처리 (4) | 2018.01.31 |
FusedLocationProviderClient (0) | 2018.01.30 |