Android82 [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] ContentProvider란 무엇인가? Android에서 ContentProvider는 앱 간 데이터(예: 파일, 데이터베이스)를 공유하는 컴포넌트입니다. 이는 여러 앱에서 접근할 수 있는 데이터 저장소 역할을 하며, 보안 및 권한 관리 기능을 포함합니다.ContentProvider를 통해 한 앱에서 다른 앱의 데이터를 안전하게 읽고 쓸 수 있습니다.ContentProvider의 사용 예시데이터베이스 공유: 데이터베이스에 저장된 정보를 다른 앱과 공유하고자 할 때.데이터 접근 용이성: 외부 앱에서 자신의 데이터를 쉽게 접근하도록 하고자 할 때.Manifest에 정의해야 하는 내용ContentProvider를 사용하기 위해 AndroidManifest.xml에 몇 가지 설정을 추가해야 합니다.ContentProvider 제공하는 쪽 (제공하는 .. 2024. 9. 25. [Android/Kotlin] 람다를 사용하는 두 가지 방식: 함수 인자와 마지막 인자 문법 Kotlin에서 함수의 마지막 인자가 람다일 때 사용할 수 있는 두 가지 스타일에 대해 알아보겠습니다. 이 두 스타일은 구문적으로 차이가 있지만 기능적으로 동일합니다. 이번 포스팅에서는 두 가지 표현의 차이점과 언제 어떤 스타일을 사용할지에 대해 설명하겠습니다.ITEM_TYPE_PROMO -> GamePromoViewHolder( inflateBinding(ItemGameListPromoBinding::inflate), getGameList = { getGameList.value }) 위 코드는 GamePromoViewHolder에 람다를 전달할 때 명시적으로 인자를 지정한 방식입니다. 반면, 아래 코드는 람다를 마지막 인자로 전달할 때 Kotlin의 문법적 편의를 활용한 예시입니다.GameP.. 2024. 9. 9. [Android/Kotlin] Kotlin에서 @Parcelize를 사용하여 객체 전달하기 Android 애플리케이션 개발 시, Activity나 Fragment 간에 데이터를 전달해야 할 때가 많습니다. 이때 가장 많이 사용되는 방법 중 하나가 Parcelable 인터페이스를 구현하는 것입니다. Kotlin에서는 @Parcelize 어노테이션을 사용하여 이 과정을 더 쉽게 만들 수 있습니다. 이번 글에서는 @Parcelize를 사용하여 데이터를 전달하는 방법에 대해 알아보겠습니다.1. @Parcelize 어노테이션 소개@Parcelize 어노테이션은 Kotlin에서 Parcelable 인터페이스의 구현을 자동화해주는 기능입니다. 이를 통해 번거로운 Parcelable 구현 코드를 간단하게 처리할 수 있습니다.예시 데이터 클래스먼저, 데이터 클래스를 정의하고 @Parcelize 어노테이션을 추.. 2024. 7. 25. [Android/Kotlin] DiffUtil과 ListAdapter를 활용한 효율적인 RecyclerView 업데이트 안드로이드 개발에서 RecyclerView는 리스트 형태의 데이터를 표시하는 데 많이 사용됩니다. RecyclerView를 최적화하는 방법 중 하나는 DiffUtil과 ListAdapter를 사용하는 것입니다. 이 글에서는 DiffUtil과 ListAdapter를 함께 사용하는 방법과 그 효율성에 대해 알아보겠습니다.1. DiffUtil이란?DiffUtil은 안드로이드의 RecyclerView에서 두 데이터 세트를 비교하여 변경된 항목들을 찾아내고, 해당 변경 사항만 RecyclerView에 업데이트하는 유틸리티 클래스입니다. DiffUtil을 사용하면 성능을 최적화하고, 부드러운 UI 애니메이션을 제공할 수 있습니다.2. ListAdapter란?ListAdapter는 RecyclerView.Adapte.. 2024. 7. 1. [Android/Kotlin] 왜 notifyDataSetChanged 대신 DiffUtil을 사용해야 하는가? 안드로이드 앱 개발에서 RecyclerView를 사용하여 데이터를 표시할 때, 데이터 변경 사항을 UI에 반영하는 방법은 매우 중요합니다. 흔히 사용되는 notifyDataSetChanged()와 더 효율적인 DiffUtil에 대해 설명하고, 왜 DiffUtil을 사용하는 것이 더 나은 선택인지 예시를 통해 알아보겠습니다.1. DiffUtil이란?DiffUtil은 안드로이드의 RecyclerView에서 두 데이터 세트를 비교하여 변경된 항목들을 찾아내고, 해당 변경 사항만 RecyclerView에 업데이트하는 유틸리티 클래스입니다. DiffUtil은 RecyclerView의 성능을 최적화하고, 더 나은 사용자 경험을 제공하는 데 중요한 역할을 합니다.2. notifyDataSetChanged()의 문제점.. 2024. 6. 28. [Kotlin] apply 문법 이해하기 코틀린(Kotlin)은 간결하고 효율적인 코드를 작성하기 위해 다양한 유용한 기능을 제공합니다. 그중 하나가 바로 apply 함수입니다. 이 블로그에서는 apply 함수의 문법과 사용법에 대해 알아보겠습니다.apply 함수란?apply 함수는 코틀린의 스코프 함수 중 하나로, 객체의 초기화를 간결하고 명확하게 할 수 있게 해줍니다. 객체를 생성하고 나서, 해당 객체의 여러 속성을 설정해야 할 때 유용하게 사용됩니다.apply 함수의 문법apply 함수는 객체의 초기화 블록을 포함하여 객체 자체를 반환합니다. 이는 초기화 코드를 간결하게 작성하고, 중복을 줄이는 데 도움이 됩니다.val person = Person().apply { name = "John Doe" age = 30 addre.. 2024. 6. 24. 이전 1 2 3 4 5 6 7 8 ··· 10 다음 반응형