안드로이드

안드로이드/활용

[Android] MediaPlayer와 MediaRecoder

MediaPlayer MediaPlayer에서는 애플리케이션 리소스에 저장된 미디어 파일, 파일 시스템의 독립형 파일 또는 네트워크 연결을 통해 들어오는 데이터 스트림에서 모두 MediaPlayer API를 사용해서 오디오 또는 동영상을 재생할 수 있습니다. MediaPlayer 구현하기 1. Manifest에 권한 선언 MediaPlayer를 사용하여 네트워크 기반 콘텐츠를 스트리밍하는 경우에는 애플리케이션에서 네트워크 액세스를 요청해야 합니다. 내부 미디어 파일만 사용한다면 해당 권한은 선언하지 않아도 됩니다. 2. MediaPlayer 실행 로컬 리소스 : 애플리케이션의 res/raw 디렉터리에 저장된 로컬 원시 리소스를 통해 재생합니다. var mediaPlayer: MediaPlayer? = M..

안드로이드/개념

[Android] Broadcast Receiver

Broadcast Receiver Broadcast는 어떤 행위에 대한 알림을 받고 방송을 해주는 기능입니다. 이 방송은 Intent를 통해 발송하게 되고, 이렇게 발송된 방송은 Broadcast Receiver 객체가 수신을 하게 됩니다. Broadcast Receiver를 구현하는 방법에는 Manifest에 리시버를 선언하거나, Context에 직접 리시버를 구현하는 두 가지 방법이 존재합니다. 수신대상의 패키지, 클래스명을 입력하는 명시적 브로드캐스트나 몇 가지의 암시적 브로드캐스트 예외(링크)를 제외하고는 모두 Context에 직접 리시버를 구현해야 합니다. Manifest에 등록 : 앱이 실행 중이 아니여도 이벤트를 수신하고 작업을 처리할 수 있습니다. Context에 등록 : 앱이 실행 중일 ..

안드로이드/개념

[Android] Service

Service Service는 안드로이드의 4대 컴포넌트 중 하나로 백그라운드 작업을 위한 컴포넌트입니다. 얼핏 백그라운드 스레드와 비슷해 보이지만 Service는 워커 쓰레드가 아닌 메인 쓰레드에서 실행됩니다. 서비스는 Started Service와 Bound Service 두 가지 형태로 실행됩니다. Started Service 서비스를 호출한 액티비티와는 관계 없이 독립적으로 동작하고 startService() 메서드로 호출합니다. 독립적으로 동작하기 때문에 액티비티의 종료에 영향을 받지 않습니다. 클래스의 인스턴스를 오직 하나만 생성해서 유지하는 디자인 패턴인 Singleton으로 동작합니다. Bound Service 서비스가 액티비티에 바인드되며 액티비티와 값을 주고받습니다. bindServic..

안드로이드/활용

[Android] ViewPager2 사용하기

ViewPager2 ViewPager2는 ViewPager 라이브러리의 개선된 버전입니다. 다음은 ViewPager2의 새로운 기능입니다. RecyclerView를 기반으로 사용 수직 스크롤링 지원 (기존에는 좌우 스크롤링만 가능) notifyDataSetChanged 기능 페이지 변경 애니메이션 제어 기능 향상 사용하기 편해진 페이지 변경 리스너 ViewPager2 구현하기 1. build.gradle에 의존성 추가 ViewPager2을 사용하기 위해서 build.gradle에 ViewPager2 라이브러리를 추가합니다. implementation 'androidx.viewpager2:viewpager2:1.0.0' 2. 레이아웃에 ViewPager2 추가 ViewPager2를 추가하는 동시에 몇 번째..

안드로이드/개념

[Android] sealed class

sealed class 코틀린에서 sealed class는 다른 클래스가 상속을 받지 못하도록 제한하는 클래스입니다. sealed class는 클래스 계층 구조에서 제한된 개수의 클래스를 나타낼 때 사용합니다. sealed class Result { data class Success(val data: T) : Result() data class Error(val exception: Exception) : Result() } sealed class의 특징 1. 상속을 제한합니다. sealed class는 다른 클래스에서 상속을 받지 못하도록 제한합니다. 그렇기 때문에 sealed class의 하위 클래스는 sealed class의 내부에서 정의되어야 합니다. 2. 유한한 개수의 하위 클래스를 갖습니다. s..

안드로이드/UI

[Android] AppBar 사용하기

AppBar AppBar는 현재 화면의 정보와 작업을 표시하기 위해 앱 창 상단에 위치해있는 바를 뜻합니다. 하단에 위치한 AppBar도 있지만 일반적으로 쓰이지는 않습니다. Container Navigation icon (optional) Title (optional) Action items (optional) Overflow menu (optional) ActionBar과 Toolbar ActionBar는 API Level 11에 Activity에 붙은 형태로 등장하여 계속 사용되다가 API Level 21부터 Toolbar widget을 이용하여 ActionBar를 사용할 수 있게 되었습니다. ActionBar는 Activity에 종속적인 문제와 함께 안드로이드 버전에 따라 다르게 동작할 여지가 있..

안드로이드/개념

[Android] 런타임 권한 요청하기

런타임 권한 요청 Android 6.0 마시멜로(API Level 33)부터 런타임 권한 처리가 추가되었습니다. API Level 33 이전까지는 AndroidManifest에 사용할 permission만 추가하면 되었습니다. 그 이후 버전부터는 앱 사용 중 실제로 접근하는 시점에 권한을 허용했는지 체크하여 처리를 해야합니다. 런타임 권한 요청 | Android 개발자 | Android Developers 런타임 권한 요청 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 모든 Android 앱은 액세스가 제한된 샌드박스에서 실행됩니다. 앱이 자체 샌드박스 밖에 있 developer.android.com 권한 요청 워크플로 앱에서 런타임 권한을 선언하고 요청하기 위해서는 다음..

안드로이드/활용

[Android] ListAdapter로 RecyclerView 효율적으로 사용하기

ListAdapter ListAdapter는 RecyclerView.Adapter를 베이스로 한 클래스로 RecyclerView의 리스트 데이터를 표현해주며 리스트를 백그라운드 스레드에서 diff(차이)를 처리하는 특징이 있습니다. 리스트 데이터를 갱신하기 위해서 notifyDataSetChanged()를 호출하는 경우를 볼 수 있습니다. 그러나 수많은 데이터 중 갱신될 데이터가 하나뿐이더라도 모든 항목을 통째로 갱신하게 됩니다. 이러한 불필요한 교체 비용을 줄이기 위해 고안된 것이 바로 DiffUtil입니다. DiffUtil DiffUtil은 RecyclerView의 성능을 한층 더 개선할 수 있게 해주는 유틸리티 클래스입니다. 기존의 데이터 리스트와 교체할 데이터 리스트를 비교해서 실질적으로 갱신이 ..

damon-911
'안드로이드' 카테고리의 글 목록 (8 Page)