728x90
반응형
[ pinslog ]100일 챌린지를 끝마치며2023-12-31 16:59:08https://pinslog.tistory.com/155 다시 시작 별다를 것 없던 스터디 와중 루디님이 9월 23일이 되면 2023년까지 100일이 남게 되고, 이 날부터 꾸준히 무언가를 매일 하면 100일동안 하게 되는 것이라고 알려주었다. 습관을 들이는데는 보통 60 www.pinslog.com https://pinslog.tistory.com/256 [Android] BottomSheetDialog WW 앱의 업데이트 상태를 알리기 위한 방법으로 바텀 시트 다이얼로그를 선택했다. 이전에는 기본 다이얼로그를 커스텀해 사용하는 방식을 많이 선택했는데 요즘 앱들을 살펴보면 바텀 시트 다 www.pinslog.com 100일 챌린지를 시작하고 (위) 어제까지 작성한 글(아래)이다. 중간에 챌린지 말고 하..
[ Android/Android ][Android] BottomSheetDialog2023-12-30 18:52:15WW 앱의 업데이트 상태를 알리기 위한 방법으로 바텀 시트 다이얼로그를 선택했다. 이전에는 기본 다이얼로그를 커스텀해 사용하는 방식을 많이 선택했는데 요즘 앱들을 살펴보면 바텀 시트 다이얼로그로 상호작용을 많이 하는 것 같아 한번 구현해보기로 했다. 바텀 시트 다이얼로그에도 종류가 있는데, 자세한 것은 아래의 링크에 잘 설명이 되어 있으니 참고하면 좋다. 오늘 구현해 볼 것은 Modal bottom sheet이다. Bottom Sheet Dialog 예제 : Modal, Persistent, 모서리 둥글게 등 1. Bottom Sheet Dialog 1-1. 개념 1-2. 종류와 차이 2. Modal Bottom Sheet 2-1. 기본 예제 2-2. 모서리가 둥근 예제 2-3. 버튼이 있는 예제 2-4..
[ Android/Android ][Android] AppUpdateManager 앱 업데이트 확인하기2023-12-29 22:37:25앱을 사용하다 가끔 업데이트 하라는 팝업을 본 적이 있을 것이다. 앱의 버전을 확인하고, 업데이트가 필요할 경우 플레이스토어로 이동할 수 있도록 기능을 추가해보려고 한다. AppUpdateManager 앱이 자체 업데이트를 시작할 수 있도록 하는 작업을 관리하도록 도와주는 인터페이스이다. 그러니까 인앱 업데이트를 구현하기 위한 클래스인데, 이번에는 업데이트 필요 여부에 관한 것 정도만 확인할 예정이다. 초기화 val appUpdateManager = AppUpdateManagerFactory.create(context) 업데이트 상태 확인 fun getAppUpdateStatus() { // 업데이트 가능한지 확인 val appUpdateInfoTask = appUpdateManager.appUpdate..
[ Android/Android ][Android] 권한 요청 워크 플로우2023-12-28 22:58:39앱을 사용할 때 사용자의 위치에 접근하거나, 미디어 파일에 접근해야하는 경우 권한을 요청하는 다이얼로그를 본 적이 있을 것이다. 오늘은 권한 요청을 위한 작업 순서에 대해 알아보도록 할 것이다. 개인 프로젝트인 WW (기온별 옷차림 안내 어플) 을 개발하며 작성해두었던 내용임을 참고하길 바란다. 앱의 매니페스트 파일에서 앱에 요청할 필요가 있을 권한 선언 특정 비공개 사용자 데이터에 액세스 해야하는 앱의 작업을 사용자가 호출할 때까지 기다림 → 호출했을 때 런타임 권한을 부여했는지 확인 WW의 경우 위에서 선언한 것처럼 ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION 권한이 필요함. -> 위치 권한이다. ActivityCompat.checkSelfPermission 권한 ..
[ pinslog/Log.daily() ][Kotlin] Kotlin Destructuring2023-12-27 18:36:42때로는 객체를 여러 변수로 분해하는 것이 더 편리할 때가 있다. 이를 코틀린에선 구조 분해 할당(구조 분해 선언)이라고 하며, 한번에 여러 변수를 생성할 수 있다. data class Person( val name: String, val age: Int, ) fun main() { val person = Person("David", 30) val (name, age) = person println(name) // David println(age) // 30 } 이는 다음과 같이 컴파일 된다. val name = person.component1() val age = person.component2() 데이터 클래스가 자동으로 componentN() 를 제공하며, 클래스에서 직접 구현하기 위해서는 다음과 같..
[ pinslog/Log.daily() ][Kotlin] takeIf2023-12-26 22:25:37주어진 조건을 만족하는 경우 해당 객체를 반환하는 함수이다. (만족하지 못하는 경우 null을 반환함) takeIf는 단일 객체에 대한 필터링을 도와준다. inline fun T.takeIf(predicate: (T) -> Boolean): T? 주어진 조건 (it.age > 30) 을 만족하는 경우 해당 객체를 반환 그렇지 않은 경우 null을 반환하는 것을 확인할 수 있다. data class Person( val name: String, val age: Int, ) fun main() { val list = listOf(Person("amy", 34), Person("john", 45), Person("tom", 27)) list.forEach { println(it.takeIf { it.age >..
728x90
반응형