전체 글139 [Android/Kotlin] activityResultLauncher로 비동기 데이터 교환 및 파일 업로드 결과 처리하기 안드로이드에서는 화면 간 데이터 교환을 위해 기존에 startActivityForResult를 사용했지만, activityResultLauncher API가 등장하면서 더 직관적이고 안전하게 데이터를 주고받을 수 있게 되었습니다.이번 글에서는 카메라 액티비티에서 촬영한 파일을 서버에 업로드하고, 그 결과를 원래 화면에 전달하여 토스트로 표시하는 예시를 통해 activityResultLauncher의 사용법을 알아보겠습니다.1. activityResultLauncher를 onCreate에서 정의해야 하는 이유activityResultLauncher는 액티비티의 생명주기를 따르는 안전한 비동기 콜백입니다. onCreate에서 한 번만 정의하여야 안정적으로 동작하며, 다른 메서드에서 정의할 경우 여러 개의 a.. 2024. 11. 1. [Android/Kotlin] 코틀린에서 비동기 콜백 처리하기: 람다와 인터페이스 방식 비교 1. 람다 표현식을 사용한 콜백람다 표현식은 코드가 간결해지고 가독성을 높여주며, 코틀린의 함수형 프로그래밍 스타일을 쉽게 구현할 수 있습니다. 예를 들어, reportEmergency 메서드에서 이벤트 ID를 전달받아 처리하는 방식을 람다로 작성한 코드는 다음과 같습니다.fun reportEmergency( context: Context, uuid: String = UserSettingsManager.getUuid(context), latitude: Double = 37.585057, longitude: Double = 126.885347, eventIdCallback: ((Long) -> Unit)? = null // 람다로 콜백 전달) { CoroutineScope(.. 2024. 10. 30. [Android/Kotlin] 기본 카메라 기능을 사용한 사진 및 비디오 자동 촬영 시도 기록 이번 글에서는 Android에서 기본 카메라 기능을 활용하여 자동으로 사진과 비디오를 촬영하려고 시도한 과정을 기록합니다. CameraX 대신 기본 카메라 기능을 통해 구현했으나, 자동 촬영이 원활하게 되지 않아 최종적으로 CameraX로 전환하게 된 이유와 관련한 경험을 공유합니다. 이 기록은 나중에 다시 기본 카메라를 활용할 가능성을 염두에 두고 작성되었습니다.1. 기본 카메라를 이용한 촬영 시도Android의 기본 카메라 앱을 호출하여 사진과 비디오를 촬영하려고 했습니다. 이때 Intent와 ActivityResultLauncher를 사용해 시스템 카메라 앱을 호출하여 촬영 작업을 수행하고, 촬영된 미디어 파일을 앱의 지정된 위치에 저장하도록 했습니다.2. 구현 코드 개요2.1. ActivityRe.. 2024. 10. 25. [Android/Kotlin] CameraX로 자동 사진 및 비디오 촬영 기능 구현하기 이번 글에서는 Android의 CameraX 라이브러리를 활용하여 자동으로 사진 및 비디오를 촬영하는 기능을 구현하는 방법을 소개합니다. 권한 설정부터 CameraX 의존성 추가, 미리보기 화면 구성, 자동 촬영 기능 구현까지 단계별로 설명해 보겠습니다. CameraX의 주요 기능을 이해하고 실제 프로젝트에서 어떻게 활용할 수 있는지 다뤄보겠습니다.1. 권한 설정 (AndroidManifest.xml)CameraX를 사용해 카메라와 오디오를 제어하려면 다음과 같은 권한이 필요합니다.CAMERA: 카메라 사용을 위한 필수 권한입니다.RECORD_AUDIO: 비디오 촬영 시 오디오 녹음을 위해 필요합니다.WRITE_EXTERNAL_STORAGE 및 READ_EXTERNAL_STORAGE: Android 10.. 2024. 10. 25. [Android/Kotlin] Bluetooth Notify 기능 구현: CCCD 설정과 알림 활성화 방법 이번 글에서는 Android에서 Bluetooth 알림(notification) 기능을 설정하는 방법에 대해 공부한 내용을 정리해 두고자 합니다. 특히, 00002902-0000-1000-8000-00805f9b34fb UUID를 사용하는 CCCD(Client Characteristic Configuration Descriptor) 설정, 알림 활성화 과정, 그리고 Android 버전별(API 33 Tiramisu 이상과 이하) writeDescriptor() 및 onCharacteristicChanged() 메서드의 처리 방법에 대해 기록 해 보겠습니다. 1. Bluetooth 알림 개요Bluetooth GATT(GATT: Generic Attribute Profile) 프로토콜을 통해 GATT 서버가.. 2024. 10. 25. [Android/Kotlin] Kotlin에서 abstract class와 open class의 차이점 Kotlin에서는 클래스 계층 구조를 정의할 때 abstract class와 open class가 중요한 역할을 합니다. 이 두 클래스는 상속을 허용하지만, 각각의 목적과 사용 방식에서 차이가 있습니다. 이번 글에서는 abstract class와 open class의 개념과 차이점을 코드 예시와 함께 알아보겠습니다. 1. abstract class (추상 클래스)정의:abstract class는 인스턴스화할 수 없는 클래스입니다. 즉, 객체를 직접 생성할 수 없으며, 반드시 상속을 통해서만 사용됩니다.목적:공통 로직을 상속해주면서, 일부 메서드나 속성은 하위 클래스에서 구현을 강제하는 경우 사용됩니다.추상 메서드:추상 클래스는 구현되지 않은 메서드(추상 메서드)를 가질 수 있으며, 하위 클래스에서 반드시.. 2024. 10. 4. [Android/Kotlin] XML 속성으로 조정 가능한 GameListView 커스텀 뷰 구현과 활용 방법 안드로이드에서 사용자 맞춤형 UI를 구현할 때 커스텀 뷰를 사용하는 것이 매우 유용합니다.이번 포스팅에서는 GameListView라는 커스텀 뷰를 만들어, XML에서 속성만으로 쉽게 조정할 수 있는 방법을 소개합니다. 이 뷰는 게임 목록을 RecyclerView로 보여주며, 카드 유형과 레이아웃을 속성에 따라 유연하게 조정할 수 있습니다. 1. 커스텀 뷰 만들기GameListView라는 커스텀 뷰는 LinearLayout을 확장하여 구현했습니다.이 뷰는 게임 데이터를 리스트 형식으로 보여주며, RecyclerView를 통해 레이아웃을 구성합니다. 특히, 이 커스텀 뷰는 XML에서 속성을 정의하여 다양한 레이아웃을 설정할 수 있습니다. 즉, 뷰를 XML에 선언만 하면, 해당 속성을 이용해 간편하게 사용할 .. 2024. 10. 2. [Android/Kotlin] ContentProvider란 무엇인가? Android에서 ContentProvider는 앱 간 데이터(예: 파일, 데이터베이스)를 공유하는 컴포넌트입니다. 이는 여러 앱에서 접근할 수 있는 데이터 저장소 역할을 하며, 보안 및 권한 관리 기능을 포함합니다.ContentProvider를 통해 한 앱에서 다른 앱의 데이터를 안전하게 읽고 쓸 수 있습니다.ContentProvider의 사용 예시데이터베이스 공유: 데이터베이스에 저장된 정보를 다른 앱과 공유하고자 할 때.데이터 접근 용이성: 외부 앱에서 자신의 데이터를 쉽게 접근하도록 하고자 할 때.Manifest에 정의해야 하는 내용ContentProvider를 사용하기 위해 AndroidManifest.xml에 몇 가지 설정을 추가해야 합니다.ContentProvider 제공하는 쪽 (제공하는 .. 2024. 9. 25. [Android/Terminal] Android 디바이스에서 캘린더 이벤트 조회하기: ADB 명령어 사용법 이 글에서는 adb shell과 content query 명령어를 사용하여 Android 디바이스의 캘린더 이벤트를 조회하는 방법을 설명 하겠습니다. ADB란 무엇인가요?"Android Debug Bridge (ADB)"는 Android 디바이스와 개발 컴퓨터 간의 통신을 관리하는 도구입니다. ADB를 사용하면 애플리케이션을 설치하거나 제거하고, 로그를 수집하며, 디바이스의 쉘 명령어를 실행하는 등 다양한 작업을 수행할 수 있습니다. ADB Shell 명령어 사용하기adb shell 명령어를 사용하면 Android 디바이스의 쉘 환경에 접근할 수 있습니다. 이 명령어를 통해 디바이스에서 직접 명령어를 실행하고, 파일 시스템을 탐색하며, 시스템 정보를 얻을 수 있습니다. 캘린더 이벤트 쿼리하기캘린더 이벤트.. 2024. 9. 12. [Android/Kotlin] 람다를 사용하는 두 가지 방식: 함수 인자와 마지막 인자 문법 Kotlin에서 함수의 마지막 인자가 람다일 때 사용할 수 있는 두 가지 스타일에 대해 알아보겠습니다. 이 두 스타일은 구문적으로 차이가 있지만 기능적으로 동일합니다. 이번 포스팅에서는 두 가지 표현의 차이점과 언제 어떤 스타일을 사용할지에 대해 설명하겠습니다.ITEM_TYPE_PROMO -> GamePromoViewHolder( inflateBinding(ItemGameListPromoBinding::inflate), getGameList = { getGameList.value }) 위 코드는 GamePromoViewHolder에 람다를 전달할 때 명시적으로 인자를 지정한 방식입니다. 반면, 아래 코드는 람다를 마지막 인자로 전달할 때 Kotlin의 문법적 편의를 활용한 예시입니다.GameP.. 2024. 9. 9. [Android/Kotlin] open 메서드를 활용한 다형성 구현 Kotlin에서 클래스나 메서드를 정의할 때, open 키워드를 사용하면 상속받은 클래스에서 해당 메서드를 오버라이드할 수 있습니다. 이번 포스팅에서는 open fun onBind(profileDetailModel: ProfileDetailModel) {} 메서드를 예로 들어, 이 메서드가 어떤 역할을 하고, 어떻게 활용될 수 있는지에 대해 설명하겠습니다. open 키워드와 메서드 오버라이드Kotlin에서는 기본적으로 모든 클래스와 메서드가 final로 선언됩니다. 이는 서브클래스에서 해당 클래스나 메서드를 상속하거나 오버라이드할 수 없음을 의미합니다. 그러나, 클래스나 메서드를 open으로 선언하면, 이를 서브클래스에서 확장하거나 오버라이드할 수 있게 됩니다.예를 들어, 다음과 같은 ProfileDet.. 2024. 8. 26. [Android/Kotlin] filterIsInstance와 firstOrNull을 사용한 개선 오늘은 Kotlin 코드를 리팩토링하여 더 간결하고 명확하게 만드는 방법을 공유하고자 합니다. 주제로는 filterIsInstance와 firstOrNull을 사용하여 객체를 찾고 처리하는 방법을 다루겠습니다.변경 전 코드먼저, 기존의 toggleLike 함수 코드는 아래와 같았습니다.fun toggleLike() { val currentItems = _items.value.toMutableList() val profileImagesIndex = currentItems.indexOfFirst { it is ProfileDetailModel.ProfileImages } if (profileImagesIndex != -1) { val profileImages = currentIt.. 2024. 8. 12. 이전 1 ··· 3 4 5 6 7 8 9 ··· 12 다음 반응형