Kotlin38 [Android] Firebase Storage로 파일 관리 Android에서 Cloud Storage 시작하기 | Cloud Storage for Firebase이 페이지는 Cloud Translation API를 통해 번역되었습니다. 의견 보내기 Android에서 Cloud Storage 시작하기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Cloud Storagefirebase.google.comFirebase Cloud Storage는 문서, 사진 등의 콘텐츠를 저장할 수 있는 객체이다. 이미지를 업로드하고 다운로드할 수도 있고, 앱을 사용하는 중에 특정 시점의 로그가 필요한 경우 파일 형태로 만들어서 확인해 볼 수도 있다.Firebase 설정Cluad Storage를 설정하는 부분에서 allow read, write:.. 카테고리 없음 2024. 11. 12. [Android][Compose] MaterialCalendarView를 Compose에서 사용하기 기존 xml로 작업한 PWFB 프로젝트를 Compose로 변경하면서 기존에 구현했던 캘린더 UI를 어떻게 구현해야 할까 고민이 많았다. 캘린더는 MaterialCalendarView를 사용하고 있었는데, 다른 캘린더 라이브러리나 직접 구현하는 것보다는 기존 코드를 덜 수정하는 방향으로 진행하고 싶었다. Compose에는 AndroidView라는 컴포저블이 있는데, Compose에서 아직 사용할 수 없는 UI 요소를 사용하는 경우에 쓰인다. AndroidView 컴포저블을 사용해서 MaterialCalendarView를 사용할 수 있었다.AndroidView@Composable@UiComposablefun AndroidView( factory: (Context) -> T, modifier: M.. 작업 일지 2024. 5. 19. [Android][Compose] DataStore 사용해보기 DataStore DataStore는 Jetpack 라이브러리로 Key-Value 또는 형식화된 객체를 프로토콜 버퍼와 함께 저장이 가능한 저장소다. 코틀린의 코루틴과 Flow를 사용하여 데이터를 비동기적이고 일관되며 트랜잭션 방식으로 저장한다. 기존에 SharedPreferences를 사용하고 있다면 DataStore로 마이그레이션 할 것을 구글에서 권장하고 있다. 원본 링크 위 이미지를 보면 PreferencesDataStore와 ProtoDataStore가 있다. DataStore는 두 가지 구현을 제공한다. ◾ Preferences DataStore Key를 사용하여 데이터를 저장하고 접근한다. 미리 정의된 스키마가 필요하지 않으며 유형의 안정성도 제공하지 않는다. ◾ Proto DataStore.. Android/DataStore 2024. 4. 1. [Android] Flow와 StateFlow 사용해보기 LiveData와 Flow LiveData는 안드로이드 컴포넌트의 생명 주기와 결합되어 있어 UI 데이터를 관리하기 편하다는 장점 때문에 자주 사용한다. 하지만 아키텍처의 관점에서 볼 때 LiveData는 비동기 데이터 스트림을 처리하도록 설계되지 않았고, 안드로이드 프레임워크에 의존하기 때문에 도메인 계층과 데이터 계층에서 사용하기에는 적합하지 않다. 반면 Flow의 경우 순수 코틀린 언어로 되어있을 뿐만 아니라 비동기로 계산이 가능한 데이터 스트림이다. 이런 이유로 안드로이드에서는 데이터 계층에서 Flow를 사용한 다음 asLiveData()를 통해 ViewModel에서 LiveData로 변환하는 것을 추천하고 있다. (참고) StateFlow가 등장하면서 위와 같은 작업을 할 필요가 없어졌다. St.. Android/Flow 2024. 3. 26. [Android] local.properties로 API Key 관리하기 프로젝트 관리를 위해 Git과 같은 형상관리 툴을 사용할 경우 API Key가 노출될 수 있음을 고려해야 한다. 안드로이드에서는 한 가지 방법으로 gitignore에 등록된 local.properties를 사용한다. local.properties에 API Key를 저장하고, 앱의 빌드 정보에 키 값을 추가하여 BuildConfig로 코드 상에서 접근할 수 있다. /** * local.properties */ API_KEY_1 = "89sdfsbsn815832jdsfkjedv" API_KEY_2 = "04kjcasvbcxzv632jbvzj35f" API_KEY_3 = "cbfhb518gfa0h52ngf=4ynb3" 예시를 위한 임시 키 값을 만든다. /** * build.gradle */ android {.. Android/BuildConfig 2024. 3. 13. [Android] 내비게이션의 다음 경로 정보 구하기#1 프로젝트에서 내비게이션을 사용하여 다음 경로까지의 거리 값과 회전 정보를 구해야하는 일이 생겼다. 개발 과정과 사용하게 된 API에 대해서 정리를 해본다. 사용 API ◾ 카카오내비 길찾기 SDK 우선 내비게이션을 사용하기 위해서 네이버, 카카오, 티맵과 같은 플랫폼에서 제공하는 API 또는 SDK를 사용해야 했다. 이 중에서 '카카오내비 길찾기 SDK'(링크)는 KNRGCode(링크)라는 회전 구간 경로 분류 코드를 내려주는데 별도의 구현없이 필요한 정보를 얻을 수 있어서 선택하게 됐다. ◾ SK Open API 지오코딩-좌표변환 API / 경로안내-직선 거리 계산 API 기기에서 GPS를 통해 얻는 좌표는 WGS84 좌표계다. 하지만 카카오내비에서는 KATECH 좌표계를 사용하기 때문에 좌표변환이 필.. 작업 일지 2024. 3. 5. [Android][Compose] Bluetooth Connect 하기 [Android][Compose] Bluetooth Scan 하기 안드로이드에서 제공하는 BluetoothLeScanner를 사용해서 Bluetooth 주변기기를 Scan 해보려고 한다. Scan 데이터를 얻으면 아래 이미지와 같이 리스트로 그릴 것이다. (UI는 Compose를 사용) 권한 처리하기 ogyong.tistory.com Bluetooth Scan 하기에 이어서 Connect를 해보려고 한다. GATT(Generic Attribute Profile) Connect를 하고 디바이스의 정보를 구하는 과정에서 GATT가 사용된다. GATT는 ATT를 프로토콜로하여 BLE 기기 간에 데이터를 주고 받기 위한 방식을 정의해 놓은 프로파일이다. ATT는 UUID를 고유 식별자라는 속성을 지니며, 이 속.. Android/Bluetooth 2023. 7. 10. [Android] SplashScreen 사용하기 Android 12부터 스플래시 화면을 구현하기 위한 SplashScreen API(참고)가 추가되면서 모든 앱이 시작할 때 스플래시 화면에 앱 아이콘을 보여주게 되었다. 이것 때문에 SplashScreen의 처리를 하지 않으면 앱 아이콘이 포함된 스플래시 화면이 먼저 노출되었다가 사용자가 구현한 스플래시 화면이 보이는 이슈가 생겼다. 기존에는 스플래시 화면을 구현하기 위해서 직접 화면을 만들어야 했다. 하지만 SplashScreen이 등장하고 나서는 직접 화면을 만들 필요도 없고 애니메이션과 같은 효과와 더불어 스플래시 화면을 간단하게 만들 수 있게 되었다. 그럼 기존 방식에 문제가 있었는가 하면 앱의 시작 상태 중 Hot Start에 그 이유가 있다. Hot Start 상태에서는 앱이 실행될 때 메모.. Android/Splash 2023. 4. 16. [Android] Paging3에서 데이터 없을 때 처리하기 Paging3는 PagingData를 PagingDataAdapter의 submitData로 전달하여 리스트를 표시한다. 만약 리스트에 표시할 데이터가 없는 경우 초기 화면을 표시해야 하지만, 데이터가 없어도 PagingData는 null이나 empty로 내려오지 않는다. 이럴 때 PagingDataAdapter의 addLoadStateListener를 사용하면 데이터가 없을 때 처리를 할 수 있다. addLoadStateListener는 CombinedLoadState로 현재 PagingData의 로딩 상태를 관찰한다. CombinedLoadStates의 LoadState 정보는 다음과 같다.(참고) • append 목록의 끝에서 데이터를 로드하는 상태 • prepend 목록의 시작 부분에서 데이터를 .. Android/Paging3 2023. 2. 20. [Android] Glide, 모서리 둥글게 처리하기 .apply(RequestOptions.bitmapTransform(RoundedCorners(정수 값))) Glide를 사용해서 이미지를 표시할 때, 모서리를 둥글게 하려면 위의 코드를 추가하면 된다. Glide.with(this) .load(R.drawable.sample) .into(mBinding.ivMain) Glide.with(this) .load(R.drawable.sample) .apply(RequestOptions.bitmapTransform(RoundedCorners(80))) .into(mBinding.ivMain) Android/Glide 2023. 2. 6. [Android] Paging3에서 아이템 삭제하기 + 로딩 처리 [Android] Paging3, 스크롤 시 로딩 화면 추가하기 [Android] Paging3 + Room + Flow 사용하기 [Android] RecyclerView에서 페이징+삭제 처리하기 #2 (with Room) [Android] RecyclerView에서 페이징 처리하기 #1 RecyclerView에서 리스트를 스크롤하다가 어느 순간에 로딩 화면 ogyong.tistory.com 저번에 했던 스크롤 시 로딩 화면을 추가하는 것에 이어서 Paging3에서 아이템을 삭제하고, 삭제가 처리되는 동안 로딩 화면을 띄우는 것을 해보려고 한다. Room 삭제 쿼리 추가 @Dao interface SampleDao { ... /** * 아이템 삭제 */ @Query("DELETE FROM sample W.. Android/Paging3 2023. 1. 19. [Android] Paging3, 스크롤 시 로딩 화면 추가하기 [Android] Paging3 + Room + Flow 사용하기 [Android] RecyclerView에서 페이징+삭제 처리하기 #2 (with Room) [Android] RecyclerView에서 페이징 처리하기 #1 RecyclerView에서 리스트를 스크롤하다가 어느 순간에 로딩 화면이 뜨면서 리스트가 늘어나는 것을 ogyong.tistory.com 저번에 Paging3를 이용해서 리스트를 그려봤다. 여기에 추가로 스크롤을 해서 다음 페이지를 호출할 때 로딩 화면을 그려보려고 한다. Paging3 라이브러리는 LoadState 클래스를 통해 데이터의 로드 상태를 추적할 수 있다. 그리고 로드 상태가 변경되면 LoadState 값을 자동으로 알림 받는 LoadStateAdapter가 존재한다. .. Android/Paging3 2023. 1. 18. 이전 1 2 3 4 다음