본문 바로가기

Kotlin/안드로이드 공부

(53)
코루틴 플레이그라운드 - 취소 import kotlinx.coroutines.* import kotlin.system.* fun main() { val time = measureTimeMillis { runBlocking{ // 동기 (람다 내의 모든 작업이 완료될 때까지 반환되지 않는다.) println("Weather forecast") try { getWeatherReport() } catch(e: AssertionError) { println("Caught exception in runBlocking(): $e") println("Report unavailable at this time") } println("Have a good day!") } } println("${time/1000.0}") } suspend fun get..
코루틴 플레이그라운드 - 예외처리 import kotlinx.coroutines.* import kotlin.system.* fun main() { val time = measureTimeMillis { runBlocking{ // 동기 (람다 내의 모든 작업이 완료될 때까지 반환되지 않는다.) println("Weather forecast") try { getWeatherReport() } catch(e: AssertionError) { println("Caught exception in runBlocking(): $e") println("Report unavailable at this time") } println("Have a good day!") } } println("${time/1000.0}") } suspend fun get..
코루틴 플레이그라운드 - async import kotlinx.coroutines.* import kotlin.system.* fun main() { val time = measureTimeMillis { runBlocking{ // 동기 (람다 내의 모든 작업이 완료될 때까지 반환되지 않는다.) println("Weather forecast") getWeatherReport() println("Have a good day!") } } println("${time/1000.0}") } suspend fun getForecast():String { // 정지 함수는 모든 작업이 완료된 후에만 반환된다. delay(1000)// 코루틴이나 다른 정지 함수에서만 호출할 수 있다. return "Sunny" } suspend fun getTemp..
코루틴 플레이그라운드 - launch import kotlinx.coroutines.* import kotlin.system.* fun main() { val time = measureTimeMillis { runBlocking{ // 동기 (람다 내의 모든 작업이 완료될 때까지 반환되지 않는다.) println("Weather forecast") launch{ // 작업의 성공 여부와 상관없이 제어 흐름이 반환되면 모든 작업 완료 printForecast() } launch{ printTemperature() } println("Have a good day!") } } println("${time/1000.0}") } suspend fun printForecast() { // 정지 함수는 모든 작업이 완료된 후에만 반환된다. delay(1..
Android 13 POST_NOTIFICATIONS 권한 안드로이드 12 기기까지는 디폴트 알림 권한이 true 안드로이드 13 기기부터는 디폴트 알림 권한이 false 이다. target 32 앱으로는 원하는 시점에 알림 권한을 요청할 수 없다. 대신 알림 채널이 만들어지는 시점에 자동으로 사용자에게 권한 요청창이 발생한다. target 33 앱에서는 원하는 시점에 런타임으로 알림 권한을 요청할 수 있다. 사용자가 "Don't allow" 버튼을 2번 클릭하면 더이상 알림 권한을 묻는 창은 뜨지 않는다. (단, "Allow" 와 "Don't allow" 버튼을 둘 다 누르지 않고 넘어간 경우는 카운팅 되지 않는다.)
안드로이드 네트워크 연결 상태 확인하기 원래는 getNetworkInfo 를 이용하여 네트워크 상태를 가져올 수 있다. 그런데 API29 에서 deprecated 되었다고 하여 새로운 방법을 찾아보았다. class NetworkConnectionStateMonitor(context: Context) : ConnectivityManager.NetworkCallback() { private var context: Context? = null private var networkRequest: NetworkRequest? = null private var connectivityManager: ConnectivityManager? = null init { this.context = context this.networkRequest = NetworkRe..
안드로이드 Splash Screen Disable 처리 결론부터 말하자면 Disable 이 불가능하다. 선택지는 3개가 될 것 같다. 1. 기본 스플래시 표출 -> 기존 스플래시 표출 두개가 순차적으로 보여지며 실제로 이렇게 2개가 뜨는 앱도 많다. Ex) 무신사, 쿠팡, 윌라 오디오북, 오늘의 집 2-1. 기본 스플래시를 투명 처리하고 기존 스플래시만 사용 테마 속성을 통해 기본 스플래시를 투명 처리할 수 있다고는 하지만, 말그대로 투명처리일 뿐 실제 동작이 스킵되는 것은 아니기 때문에 오히려 앱 시작 속도가 느리다고 생각될 것 같다. 투명이 아니더라도 아이콘 없이 흰색, 검은색으로 보여주고 기존 스플래시 화면이 나오는 경우도 있는 듯하다. Ex) 카카오 페이지(검정 화면), 요기요 (흰 화면) 더보기 이렇게 하면 투명처리 된다했는데 나는 아무리 해도 안됨..
안드로이드12 Splash Screen 안드로이드 12 에서 기본 Splash Screen 관련 내용이 추가되었다. SplashScreen API 를 사용하면 이전 버전에서도 적용할 수 있다. 단, 애니메이션과 브랜드 이미지는 불가능 implementation 'androidx.core:core-splashscreen:1.0.0' cold start, warm start 일 때 발생하며, 앱이 첫 프레임을 그리는 즉시 닫힌다. 개발자가 정의한 테마와 애니메이션을 사용하여 스플래시 화면을 표시한다. 우리가 커스텀 할 수 있는 영역은, 1. 단색 배경색 설정 @color/... // Android 12 이상 @color/... // API 적용하여 사용할 떄 2. 아이콘 설정 @drawable/... 벡터 드로어블이어야 한다. 기본적으로 앱 런처..