출처 - https://kkangsnote.tistory.com/131
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"/>
'개발 > 안드로이드' 카테고리의 다른 글
안드로이드 웹뷰 쿠키, 세션, 히스토리 삭제 (0) | 2020.10.24 |
---|---|
안드로이드 Q - 새로운 저장소 정책, Scoped Storage 알아보기 (0) | 2020.07.30 |
안드로이드 스튜디오 메모리 설정 (0) | 2020.05.18 |
Invoke-customs are only supported starting with Android O (--min-api 26) (0) | 2020.05.17 |
안드로이드 10 고유식별자 (0) | 2020.04.28 |
댓글