Android 34

데이터 바인딩 (1) : 기본 사용법

데이터 바인딩이란 UI와 앱 데이터를 선언적으로 결합하기 위해 사용하는 라이브러리다. 일반적으로는 레이아웃 파일에 선언한 뷰를 액티비티나 프래그먼트 등의 컴포넌트에서 참조하고 제어한다. 하지만 데이터 바인딩을 사용하면 레이아웃 파일에 뷰를 선언하는 동시에 데이터 변수를 참조할 수 있다. 이렇게 하면 데이터가 변경됨에 따라 뷰가 자동으로 갱신되도록 만들 수 있다. 기본적으로 뷰 바인딩 기능을 포함하므로 레이아웃 파일의 데이터 변수뿐 아니라 뷰를 참조할 수도 있다. 따라서 findViewById() 같은 UI 프레임워크를 여러 번 호출하지 않아도 된다. 또한 데이터 바인딩은 MVVM 아키텍처 패턴에서 중요한 역할을 한다. 데이터 바인딩 사용 설정 뷰 바인딩과 마찬가지로 모듈 레벨 build.gradle 파일..

Android 2022.10.29

컨텐츠 프로바이더

컨텐츠 프로바이더는 외부 앱과 앱 데이터를 공유할 때 사용하는 앱 컴포넌트다. ContentProvider 클래스 구현하기 모든 컨텐츠 프로바이더는 ContentProvider의 하위 클래스이다. ContentProvider는 다른 앱의 데이터 액세스 요청을 처리한다. 데이터 쿼리, 추가, 갱신, 삭제 등의 동작을 수행하는데, 이를 위해서는 다음 나열된 메서드를 구현해야 한다. query() 컨텐츠 프로바이더의 테이블을 쿼리한다. 쿼리할 테이블, 반환하고자 하는 행 및 열, 정렬 기준 등을 인자로 전달한다. 쿼리 결과는 Cursor 객체로 반환된다. insert() 새 행을 추가한다. 행을 추가할 테이블의 URI, 추가할 데이터(ContentValues 객체 사용) 등을 인자로 전달한다. 새로 추가되는 ..

Android 2022.09.19

JobScheduler로 백그라운드 작업 예약하기

JobScheduler를 사용하면 특정 조건을 만족하는 때 백그라운드 작업을 수행하도록 예약할 수 있다. API JobScheduler 작업을 예약하는 시스템 서비스. JobInfo 예약할 작업에 대한 정보를 포함하는 컨테이너. 작업이 실행되는 조건 등을 설정할 수 있다. JobService 예약된 작업을 수행하는 서비스. JobService JobService는 서비스이므로 매니페스트에 로 등록해야 한다. 또한 BIND_JOB_SERVICE 권한이 필요하다. ... ... ... 그리고 JobService를 상속받는 클래스를 선언한다. JobService는 다음 두 콜백 메서드를 재정의해야 한다. onStartJob(params: JobParameters!): Boolean 작업을 실행할 때 호출된다...

Android 2022.09.05

서비스 (3) : 시작되는 서비스

시작되는 서비스 컴포넌트에서 startService()를 호출하여 실행하는 서비스. 시작되는 서비스 시작하기 컴포넌트에서 startService()를 호출하고 파라미터로 서비스를 실행하는 Intent를 전달하면 서비스의 onStartCommand() 콜백이 호출된다. Context.startService(service: Intent!): ComponentName? 서비스를 시작하도록 요청한다. 파라미터 타입 설명 service Intent! 시작할 서비스에 대한 명시적 인텐트. 반환값 타입 설명 ComponentName? 서비스가 시작되거나 이미 실행 중이라면 해당 서비스의 컴포넌트 이름을 반환한다. 그렇지 않고 서비스가 존재하지 않으면 null을 반환한다. Service.onStartCommand(in..

Android 2022.08.29

서비스 (2) : 바인딩된 서비스

바인딩된 서비스 앱 컴포넌트가 bindService()를 호출하여 연결하는 서비스. 서비스에서 바인딩을 허용하려면 다음 두 가지가 필요하다. IBinder 클라이언트와 서비스가 상호작용할 때 사용하는 인터페이스. ServiceConnection 클라이언트와 서비스의 연결 상태를 모니터링한다. 클라이언트는 여러 개가 동시에 한 서비스에 바인딩될 수 있다. 서비스는 바인딩되어 있는 클라이언트가 하나라도 있는 이상 중지되지 않고, 모든 클라이언트가 바인딩을 해제해야 중지되고 소멸한다. Binder 클래스 상속받기 서비스를 클라이언트와 같은 앱, 프로세스에서만 사용한다면 Binder 클래스를 상속받아 사용할 수 있다. 이는 IBinder 인터페이스를 구현하는 클래스로, 클라이언트와 서비스 사이를 연결하는 인터페..

Android 2022.08.28

서비스 (1) : 포그라운드 및 백그라운드 서비스

서비스 서비스는 사용자가 앱과 상호작용 중이지 않을 때도 백그라운드에서 작업을 수행하기 위해 사용하는 앱 컴포넌트다. 액티비티와 달리 UI를 제공하지 않는다. 서비스 선언하기 서비스는 Service 클래스를 직접 구현하거나 프레임워크에서 제공하는 하위 클래스를 사용한다. 매니페스트 파일에 선언하기 다음처럼 의 하위 태그로 를 선언한다. ... ... 필수 속성인 android:name 속성은 서비스 클래스의 이름을 의미한다. 이외에도 서비스를 실행하는데 필요한 권한, 실행되어야 하는 프로세스 등 여러 속성이 있다. 서비스를 앱 내에서만 사용하려면 android:exported 속성을 false로 설정하여 외부 앱의 접근을 방지할 수 있다(명시적 인텐트를 사용해도 실행되지 않는다). android:desc..

Android 2022.08.27

액션 바 사용하기

API ActionBar 액티비티의 앱바로 사용하는 클래스다. 액티비티의 기본 구성요소이므로 따로 레이아웃에 위젯을 선언하지 않아도 된다. Toolbar AndroidX 라이브러리의 클래스다. ActionBar와 목적은 같지만 낮은 빌드 버전에 대한 호환성 및 더 많은 기능을 제공한다. 프레임워크가 제어하는 ActionBar와 달리 개발자가 제어한다. 업버튼 표시하기 액션바에 앱버튼을 표시하면 눌렀을 때 상위 액티비티로 돌아가는 기능을 구현할 수 있다. 상위 액티비티 지정하기 매니페스트 파일 안 activity 태그의 parentActivityName 속성으로 상위 액티비티를 지정할 수 있다. ... 업버튼 활성화하기 액티비티에서 ActionBar를 가져온 다음 setDisplayHomeAsUpEnabl..

Android 2022.08.09

알림 표시하기

API Notification / NotificationCompat 알림이 사용자에게 어떻게 표시될지를 나타내는 클래스다. API 레벨 11(Honeycomb)에 알림을 생성하는 Notification.Builder가 추가되었다. 생성자는 다음과 같다. Builder(context: Context!) API 레벨 11 ~ 25 (deprecated) Builder(context: Context!, channelId: String!) API 레벨 26 ~ API 레벨 4(Donut) 정도로 낮은 버전까지 호환되도록 하려면 AndroidX의 NotificationCompat 클래스를 사용한다. NotificationChannel / NotificationChannelCompat 유사한 알림이 속하는 집합인 ..

Android 2022.07.26

진동 울리기

API Vibrator 진동을 울릴 때 사용하는 API이다. API 레벨 31(S) 미만 버전에서는 Activity.getSystemService(Context.VIBRATOR_SERVICE)로 Vibrator를 얻는다. VibratorManager API 레벨 31(S) 이상 버전에서 Vibrator를 얻기 위해 사용하는 API이다. Activity.getSystemService(Context.VIBRATOR_MANAGER_SERVICE)로 VibratorManager를 얻은 뒤, getVibrator() 또는 getDefaultVibrator()를 호출하여 Vibrator를 얻을 수 있다. 진동 울리기 Vibrator 객체의 vibrate()에 지속 시간, 진동 패턴, 반복 횟수 등을 파라미터로 전달..

Android 2022.07.21

벨소리 재생하기

API RingtoneManager 여러 유형(알람음(Alarm), 알림음(Nofitication), 수신음(Ringtone))의 벨소리에 액세스할 수 있게 하는 API이다. 벨소리 선택 창과 관련된 인텐트 액션 및 엑스트라, 벨소리에 대한 쿼리에 사용하는 메서드 등을 포함하고 있다. 인텐트 액션 상수를 사용하여 벨소리 선택 창을 열거나, URI를 통해 Ringtone 객체를 얻어 벨소리를 재생할 수 있다. Ringtone 벨소리에 대한 정보를 제공하고 재생할 수 있게 하는 API이다. URI를 사용하여 벨소리 재생하기 벨소리의 Uri 객체가 필요하다. 각 유형에 대해 기본 벨소리의 URI를 얻으려면 RingtoneManager의 다음 정적 메서드를 사용한다. getActualDefaultRingtone..

Android 2022.07.19

Chronometer와 RecyclerView로 스톱워치 만들기

액티비티 레이아웃 activity_main.xml RecyclerView 아이템 레이아웃 list_item.xml 액티비티 코드 MainActivity.kt class MainActivity : AppCompatActivity() { private var initTime = 0L private var pauseTime = 0L private val itemList = arrayListOf() override fun onCreate(savedInstanceState: Bundle?) { val binding = ActivityMainBinding.inflate(layoutInflater) super.onCreate(savedInstanceState) setContentView(binding.root) va..

Android 2022.07.09

액티비티 (9) : 백그라운드에서 액티비티를 시작할 때 제한 사항

안드로이드 10(API 레벨 29) 이상에서는 앱이 백그라운드에서 실행 중에 액티비티를 시작할 수 있을 때 제한이 적용된다. 이는 사용자에 대한 방해를 최소화하고 사용자가 화면에 표시되는 내용을 더욱 잘 제어할 수 있도록 한다. 액티비티를 시작하기 위해 포그라운드 서비스를 실행하는 앱은 여전히 백그라운드에 있는 것으로 간주된다. 알림을 대신 표시 대부분의 경우 백그라운드에 있는 앱은 액티비티를 직접 시작하지 않고 시간에 민감한 알림을 표시하여 긴급한 정보를 사용자에게 전달한다. 이런 알림은 예를 들어 걸려오는 전화 및 활성 상태인 알람 시계를 처리하는 경우에 사용한다. 이 시스템은 사용자에게 여러 가지 이점을 제공한다. 디바이스를 사용할 때 사용자가 응답할 수 있는 알림이 표시된다. 사용자는 현재 컨텍스..

Android 2022.05.14