728x90
반응형
- [ 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 >..
- [ Do what you want/집단지성의 방 ]집단지성의 방 : 두번째 방의 문을 닫으며2023-12-25 10:25:11집단지성의 방 : 두번째 방의 문을 닫으며 집단지성의 방 : 첫번째 방의 문을 닫으며집단지성의 방 : 첫번째 방의 문을 닫으며 안녕하세요. 핀수입니다. 올해 초 처음 개설했던 스터디 집단지성의 방의 송년회를 오늘 랜선으로 개최했습니다. 이렇게까지 진지하게 할 생각은 없었www.pinslog.com안녕하세요. 핀수입니다. 벌써 2023년이 저물고, 집단지성의 방 두번째 송년회를 개최하게 되었습니다. 아마 우리 셋 중 그 어느 누구도 두번째 송년회를 할 수 있을 것이라고 생각하지 않았을 겁니다. (ㅋㅋ) 그렇게 생각할만 하기도 한 것이, 올해는 다들 업무와 개인적인 삶에 치여 집지방을 작년보다는 풍족하게 꾸려나가지 못했던 것 같습니다. 이번에는 북클럽와 해커톤을 진행했는데요, 개인적으로는 꼭 해보고 싶었던 ..
- [ pinslog ][아무튼 필사] 7일차2023-12-24 21:16:318월에 읽었던 이슬아 작가의 가녀장의 시대 중 일부이다. 이슬아 작가님은 몇년 전 인스타그램에서 알게 되었는데 그땐 한창 나도 글을 좀 써보겠다고 난리(?)치던 시기였터라, 주변 사람들로부터 글 잘 쓴다, 더 써봐라 등등의 이야기를 들어 어느정도 자부심이 살짝쿵 있는 상태였는데..작가님의 글을 읽은 후 다시는 그런 마음을 가지지 않게 되었다. 내가 글 쓰는 행위를 사랑한다는 사실만 인정하기로 했다. 작가님의 글은 쉽게 읽힌다. 그러나 그 안에 놓여진 문장과 단어들은 고르고 골라 엄선된 것처럼 느껴진다. 글을 자유자재로 움직일 수 있는 사람같다. 대단하다. 글은 쓰는 것도, 읽는 것도 사람의 마음을 동하게 할 수 있다. 그런 글을 사랑하지 않기란 정말 쉽지 않다. 오늘로 필사 챌린지가 끝이 났다. 좋은 경..
- [ pinslog ][아무튼 필사] 6일차2023-12-23 11:55:25밀려드는 업무, 제때 제때 쳐내지 못하고 이리저리 끌려다니는 내 모습을 한때는 (바로 어제까지도) 꽤나 자조적으로 바라보고, 그럼에도 포기하지 못하고 그 일들에 매달리는 내가 애처롭게 느껴지기도 했다. 주변을 지나는 이들이 ‘뭐 저렇게 열심히 하지?’ 하고 비웃을까봐 겁이 났다. 불쌍해보일 것 같았다. 사랑하는 이에게 한차례 내 속내를 쏟아놓고 나서야 이 흔들리는 마음이 진정되었다. 그리고 본가로 돌아가는 길에 책을 읽는데 어쩜 내 맘을 이렇게 잘 아나 싶은 문구들이 눈에 콕콕 박혔다. 이제 다시 일어설 때라고 말해주는 것 같았다. 수 많은 실패는 늘 나와 함께였다. 더 이상 겁낼 것도 없다. 힘내자! 6-7월 쯤 읽었던 책이다. 책을 읽고 메모해두었던 것까지 함께 가져와봤다. 더운 날 땀을 흘리며 최선..
728x90
반응형