41
Notification, Service, Alarm 2011 년 년년년 년년년년년년년년 년년년 년년년년년 년년 년 년년

Notification, Service, Alarm

Embed Size (px)

DESCRIPTION

Notification, Service, Alarm. 2011 년 봄학기 정보컴퓨터공학 부 컴퓨터 소프트웨어 설계 및 실험. 목차. Notification Service Alarm 실습. Notification. 알 림 (Notification). 액티비티를 쓰지 않고도 사용자에게 정보를 전달할 수 있는 방법 중 하나 이 외에도 토스트 (Toast), 알람 (Alarm) 등이 있음 주로 사용자의 확인이 필요한 이벤트를 알리는데 사용함 - PowerPoint PPT Presentation

Citation preview

Page 1: Notification, Service, Alarm

Notification, Service, Alarm2011 년 봄학기

정보컴퓨터공학부

컴퓨터 소프트웨어 설계 및 실험

Page 2: Notification, Service, Alarm

• Notification

• Service

• Alarm

• 실습

목차

Page 3: Notification, Service, Alarm

Notification

Page 4: Notification, Service, Alarm

• 액티비티를 쓰지 않고도 사용자에게 정보를 전달할 수 있는 방법 중 하나

이 외에도 토스트 (Toast), 알람 (Alarm) 등이 있음

• 주로 사용자의 확인이 필요한 이벤트를 알리는데 사용함

토스트 (Toast) 는 잠시 화면에 나타났다가 사라지므로 사용자가 봐야 할 중요한 내용을 알리기에는 부적합

• 다른 용도로는 실행중인 백그라운드 서비스를 나타내는데도 사용함

• 다양한 정보 전달 방법을 제공함

상태 표시줄 아이콘

알림 표시줄

소리와 진동 , LED 와 같은 폰 하드웨어를 이용한 알림

알림 (Notification)

Page 5: Notification, Service, Alarm

알림 (Notification)

상태 표시줄

펼쳐진 상태 표시줄 윈도우 알림 표시줄

Page 6: Notification, Service, Alarm

• 새로운 알림을 생성해주는 클래스

• 생성자 Notification(int icon, CharSequence tickerText, long when)

알림 생성하기 – Notification 클래스

인수 설명icon 상태 표시줄에 표시할 아이콘tickerText 상태 표시줄에 아이콘이 처음 나타날 때 잠시 출력되는 문자열when 알림의 생성 시간

Page 7: Notification, Service, Alarm

• 알림 표시줄에 나타낼 내용을 설정하는 Notification 클래스의 메소드

• 함수 원형 void setLatestEventInfo(Context context, CharSequence contentTitle,

CharSequence contentText, PendingIntent contentIntent)

알림 생성하기 - setLat-estEventInfo

인수 설명context 컨텍스트를 의미함 . 보통 알림을 호출하는 액티비티contentTitle 알림 표시줄의 제목contentText 알림 표시줄에 표시할 문자열contentIntent 알림 표시줄이 클릭될 경우 호출될 액티비티를 실행하기 위한 인텐트

Page 8: Notification, Service, Alarm

• 생성된 Notification 객체를 사용해 실제로 알림을 발생시키거나 이미 발생시킨 알림을 업데이트 , 또는 취소하는 알림 관리 클래스 시스템이 제공하는 서비스이므로 객체를 직접 생성할 필요 없음

• 객체 얻기

• 메서드

알림 발생시키기 – Notification-Manager

함수 원형 설명notify(int id, Notification notifica-tion)

알림을 발생시킨다 . id 는 알림을 구분하는 식별자존재하는 알림의 id 를 사용하면 알림이 update 됨

cancle(int id) 주어지는 id 에 해당하는 알림을 취소한다 .

cancleAll() 현재 발생된 모든 알림을 취소한다 .

Page 9: Notification, Service, Alarm

알림 예제 (1/2)• 코드

Page 10: Notification, Service, Alarm

알림 예제 (2/2)

Page 11: Notification, Service, Alarm

• 사용자가 설정해둔 기본값을 사용하는 방법 Notification.defaults

Notification.DEFAULT_LIGHTS

Notification.DEFAULT_SOUND

Notification.DEFAULT_VIBRATE

Notification.DEFAULT_ALL

하드웨어 알림 ( 벨소리 , 진동 , LED)(1/3)

Page 12: Notification, Service, Alarm

• 벨소리 지정하기 Uri Notification.sound

• 진동 설정하기 진동 기능을 사용하려면 권한이 필요

AndroidManifest.xml 에 다음 코드를 추가해야 함 <uses-permission android:name=“android.permission.VIBRATE”/>

long[] Notification.vibrate

하드웨어 알림 ( 벨소리 , 진동 , LED)(2/3)

Page 13: Notification, Service, Alarm

• LED 설정하기 Int Notification.ledARGB

LED 의 색상을 지정

Int Notification.ledOnMS, Int Notification.ledOffMS

LED 를 켤 시간과 끌 시간을 1/1000 단위로 지정

ledOnMS 를 1 로 , ledOffMS 를 0 으로 설정하면 LED 가 계속 켜져있게 되며 , 둘 다 0 으로 설정하면 LED 가 꺼짐 .

LED 를 사용하려면 Notification.flags 속성에 다음과 같은 플래그를 설정해야 한다 .

Notification.flags |= Notification.FLAG_SHOW_LIGHTS;

하드웨어 알림 ( 벨소리 , 진동 , LED)(3/3)

Page 14: Notification, Service, Alarm

• Notification.number 속성을 사용하면 상태 표시줄 아이콘이 나타내는 이벤트의 개수를 표시할 수 있다 .

1 보다 큰 값을 설정하면 그 값이 아이콘 위에 겹쳐 표시됨

0 또는 -1 을 설정하면 숫자가 없어짐

• Notification.flags 속성을 통해 알림의 동작 방식을 지정할 수 있다 .

고급 테크닉

플래그 설명FLAG_AUTO_CANCLE 사용자가 아이콘을 탭하면 자동으로 알림을 취소함FLAG_INSISTENT 취소하거나 상태표시줄을 확장하기 전까지 설정된 동작 ( 벨소리 ,

진동 , LED) 를 계속 발생시킴FLAG_NO_CLEAR 사용자가 지우기 (clear all) 를 선택할 때만 취소함FLAG_ONGOING_EVENT 알림을 진행 중 알림으로 만듬FLAG_SHOW_LIGHTS LED 불빛을 출력함

Page 15: Notification, Service, Alarm

Service

Page 16: Notification, Service, Alarm

• 백그라운드에서 실행되며 사용자와 직접적인 상호작용은 하지 않음 GUI 없이 동작함

• 서비스는 비활성 액티비티보다 더 높은 우선순위를 갖는다 .

시스템 리소스가 부족해지면 우선순위가 낮은 컴포넌트들부터 중지됨

시스템 리소스가 부족하여 강제 중지 당하는 경우에 리소스가 충분해지면 자동으로 재시작

• 사용자의 입력과는 무관하게 지속적인 처리나 규칙적인 처리 , 또는 이벤트 처리를 수행하는 작업의 경우에 서비스를 이용하면 좋다 .

• 사용 예 : 파일 다운로드 , MP3 플레이어 등

서비스 (Service)

Page 17: Notification, Service, Alarm

• 서비스를 정의하려면 Service 를 확장하는 새로운 클래스를 만들고 4

개의 메서드를 재정의해야 한다 .

void onCreate()

서비스가 처음 생성될 때 수행되는 메서드

void onDestroy()

stopService() 가 호출되거나 stopSelf() 가 호출되었을 때 수행되는 메서드 . 보통 사용했던 자원들을 해제하는 작업을 한다 .

IBinder onBind(Intent intent)

bindService() 가 호출되었을 때 수행되는 메서드 . 이 메서드에서 서비스와 액티비티 간에 연결을 설정하여 액티비티에서 서비스 안의 메서드를 호출할 수 있게 해준다 .

서비스 만들기 (1/3)

Page 18: Notification, Service, Alarm

Int onStartCommand(Intent intent, int flags, int startId)

startService() 가 호출되었을 때 수행되는 메서드 . 여기서 실제로 처리를 수행할 백그라운드 스레드를 띄우는 작업을 한다 .

리턴값을 통해 서비스의 재시작 방식을 제어할 수 있다 .

서비스 만들기 (2/3)

정의된 상수 설명START_STICKY 표준 방식 . 서비스가 런타임에 의해 종료되면 항상 재시작되며 , 재시작될

때마다 onStartCommand 가 호출된다 . 이때 전달되는 intent 는 null이다 .지속적인 백그라운드 작업이 필요한 경우나 음악 재생 서비스 등에 적합한 방식

START_NOT_STICKY 서비스가 런타임에 의해 종료되어도 startService 를 다시 호출하지 않으면 해당 서비스는 중지된다 .업데이트나 네트워크 폴링과 같이 규칙적인 처리를 다루는 서비스에 적합 (중지되어도 다음 예약 시점에 다시 호출됨 )

START_REDELIVER_INTENT 서비스가 런타임에 의해 종료되면 startService 를 다시 호출하거나 , 프로세스가 stopSelf 를 호출하기 전에 종료된 경우에만 재시작된다 . 후자의 경우에는 onStartCommand 가 호출되며 , 처리가 덜된 초기 In-tent 가 전달됨 .서비스가 요청받은 명령을 반드시 처리완료 해야 하는 경우에 적합한 방식

Page 19: Notification, Service, Alarm

Int onStartCommand(Intent intent, int flags, int startId)

flags 인자를 통해 서비스가 어떻게 시작됐는지 알아낼 수 있다 .

• 새로운 서비스를 만들고 난 뒤에는 이를 ApplicationManifest.xml

파일에 등록해야 한다 .

<service android:name=“.MyService” android:enabled=“true”/>

서비스 만들기 (3/3)

flag 설명START_FLAG_RETRY 재시작 방식이 START_STICKY 이면서 서비스가 비정상적인

종료를 당한 후에 재시작되었음을 나타냄START_FLAG_REDELIVER 재시작 방식이 START_REDELIVER_INTENT 이면서 서비스가

stopSelf 를 호출하기 전에 비정상적인 종료를 당한 후에 재시작되었음을 나타냄

Page 20: Notification, Service, Alarm

• 서비스 시작하기 ComponentName startService(Intent intent)

• 서비스 중지하기 boolean stopService(Intent intent)

• 서비스 스스로 종료하기 void stopSelf(int startId)

서비스 시작 , 중지하기

Page 21: Notification, Service, Alarm

서비스의 Life Cycle

onCreate()

onStartCommand() onBind()

onDestroy()

startSer-vice()

bindService()

onUnBind()

onReBind()

Service 수행

Page 22: Notification, Service, Alarm

• ServiceExample.java

서비스 예제 (1/4)

Page 23: Notification, Service, Alarm

• MyService.java (1/2)

서비스 예제 (2/4)

Page 24: Notification, Service, Alarm

• MyService.java (2/2)

서비스 예제 (3/4)

Page 25: Notification, Service, Alarm

서비스 예제 (4/4)

Page 26: Notification, Service, Alarm

Alarm

Page 27: Notification, Service, Alarm

• 미리 정해둔 시간과 간격에 따라 인텐트를 발생시키는 기능

• 어플리케이션과 독립적으로 동작함 어플리케이션이 종료되어도 설정된 알람은 정상적으로 수행될 뿐만 아니라 종료된 어플리케이션의

액티비티를 열수도 있음

• 애플리케이션의 리소스 요구사항을 줄이는데 매우 효과적

• 장치가 절전상태에 있어도 활성화되어 있으며 , 옵션으로 장치를 깨울 수도 있다 .

• 장치가 재부팅되면 모든 알람은 취소된다

알람 (Alarm)

Page 28: Notification, Service, Alarm

• 알람을 생성하고 취소하는 등 알람을 관리하는 알람 관리 클래스 시스템이 제공하는 서비스이므로 객체를 직접 생성할 필요 없음

• 객체 얻기

• 일회성 알람을 발생시키는 메서드 set(int type, long triggerAtTime, PendingIntent operation)

Alarm type 의 종류

알람 관리하기 – AlarmManager

값 설명RTC 지정된 시간에 펜딩인텐트를 발생시키지만 장치를 깨우지는 않는다

RTC_WAKEUP RTC 와 같지만 장치가 절전상태인 경우 장치를 깨운다

ELAPSED_REALTIME 장치가 마지막으로 부팅된 이후로 경과된 시간을 기준으로 시간을 지정한다 . 장치를 깨우지는 않는다

ELAPSED_REALTIME_WAKEUP

ELAPSED_REALTIME 과 같지만 장치가 절정상태인 경우 장치를 깨운다

Page 29: Notification, Service, Alarm

• 반복 알람을 발생시키는 메서드 setRepeating (int type, long triggerAtTime, long interval, PendingIntent operation)

정확하게 지정된 시간간격으로 알람을 발생시키지만 배터리 소모가 상당히 클 수 있다 .

setInexactRepeating (int type, long triggerAtTime, long interval, PendingIntent op-

eration)

정확한 간격 대신 AlarmManager 에 정의된 상수들 중 하나를 사용하여 알람을 반복한다 . (배터리 효율이 좋음 )

INTERVAL_FIFTEEN_MINUTES, INTERVAL_HALF_HOUR, INTERVAL_HOUR, INTERVAL_HALF_DAY, INTERVAL_DAY

• 알람을 취소하는 메서드 cancel (PendingIntent operation)

알람 관리하기 – AlarmManager

Page 30: Notification, Service, Alarm

• 일반적인 방법 ( 알람 1 개만 발생시킬 때 )

• 알람을 여러 개 발생시킬 때

알람을 여러 개 발생시킬 때는 알람끼리 구분할 구분자가 필요한데 그 구분자가 get-

Broadcast() 함수의 두번째 인자이다 .

• 인텐트에 값을 넣고 그 값이 변경될 일이 많을 때

getBraodcast() 함수의 마지막 인자에 PendingIntent.FLAG_UPDATE_CURRENT

를 넣으면 변경된 intent 의 extra 값을 제대로 받아오는 것을 보장해준다 .

참고 – PendingIntent 만들기

Page 31: Notification, Service, Alarm

• 알람은 지정된 시간이 되면 설정된 PendingIntent 를 Broadcast

하는데 이것을 수신하여 처리하기 위해 리시버를 구현해야 한다 .

AndroidManifest.xml 에 등록

BroadcastReceiver 를 확장한 리시버 클래스 구현

onReceive() 안에서 원하는 작업을 할 수 있으나 5 초라는 시간제한이 존재하므로 시간이 오래 걸리는 작업의 경우 서비스나 쓰레드 (thread) 를 이용

• 리시버는 목적에 따라 여러 개 만들 수도 있다 .

알람 이벤트 리시버 등록

Page 32: Notification, Service, Alarm

• 현재 시간 기준으로 설정하기

• 절대 시간으로 설정하기

참고 – 시간 설정

Page 33: Notification, Service, Alarm

• AlarmTest.java

알람 예제

Page 34: Notification, Service, Alarm

• AlarmReceiver.java

• RepeatAlarmReceiver.java

알람 예제

Page 35: Notification, Service, Alarm

알람 예제

Page 36: Notification, Service, Alarm

실습

Page 37: Notification, Service, Alarm

• 지난 실습이었던 Notepad 를 수정하여 알람기능이 있는 ToDoList 를 만든다

• 지난 실습에서 달라진 점

Notepad.java -> SimpleToDoList.java

NoteEdit.java -> ToDoEdit.java

NotesDbAdapter.java -> ToDosDbAdapter.java

note_edit.xml -> todo_edit.xml

• 새로 추가된 파일

AlarmReceiver.java

실습

Page 38: Notification, Service, Alarm

• todo_edit.xml 은

note_edit.xml 에

오른쪽 코드를

끼워넣으면 됨

실습

이 부분

Page 39: Notification, Service, Alarm

• 구현 해야 할 것 ToDoEdit.java

createAlarm(), cancleAlarm()

AlarmReceiver.java

onReceive()

실습

Page 40: Notification, Service, Alarm

실행 화면

Page 41: Notification, Service, Alarm

실행 화면

클릭 시