15주차 15주차. 통지, 통지 그리고 안드로이드 마켓 안 켓
학습 내용 1. 백그라운드 알림 2. 통지 출력 3. 커 커스텀 텀 통지 뷰 4. 안드로이드 마켓
백그라운드 알림 사용자와의 통신 - 프로그램의 상태나 특정 사건이 발생했음을 사용자에게 통지하고 다음 동작에 대한 질문을 하거나, 사용자에게 작업 지시를 받을 수 있는 기능이 필요함 - 활성화된 프로그램의 경우 짧은 메시지는 출력하고 긴 전달사항이나 질문에는 Toast 로 출력하 주로 대화상자를 이용함
백그라운드 알림 백그라운드 알림 - 알람이나 BR의 경우도 배경에서 대기하다가 시간이 되거나 신호를 받았을 때 사용자에게 통지함 - Toast는 출력할 수 있지만 잠시만 보였다가 사 라지므로 사용자가 보고 내용을 확실히 접수했 필요함 음을 보장할 장할 수 있는 방법이 필 함
백그라운드 알림 백그라운드 알림 - 통지 - 백그라운드 프로세스가 사용자와 통신할 수 있는 좀 더 확실한 방법이 필요한데 그것이 바로 통지 (Notification)임 - 화면 제일 위쪽에는 타이틀 바가 있으며 오른쪽에 현재 시간, 배터리 잔량, 네트워크 상태 등이 표시됨 - 타이틀 바의 왼쪽 칸은 비어 있는데 이 영역을 상태 영역 영역 이라고 하며 통지 아이콘이 나타남 상태
백그라운드 알림 통지와 상태 영역 - 통지는 최초 잠깐만 보이지만 Toast와는 달리 사용자가 확인하기 전에는 아이콘이 계속 표시됨 - 소리나 진동, 불빛 같은 좀 더 적극적인 방법으로 사용자에게 신호를 보낼 수 있음 -장 장소가 가 협소하여 협 하여 사건 발생 사실만 아이콘으로 아이콘 표시할 뿐이며 구체적인 내용은 당장 보이지 않음 - 상태 영역을 아래로 드래그하여 확장하거나 Home 화면의 메뉴에서 Notification 항목을 선택하면 통지에 대한 상세한 정보가 출력됨
백그라운드 알림 통지 - 보통의 경우에는 통지 내용이 없으며 상태 영역을 확장해도 아무 것도 보이지 않음 - 장비에 특별한 사건이 발생하면 이 영역에 상세한 알림 메시지와 시간이 표시되며 통지 뷰를 탭하면 통지와 관련된 액티비티로 점프하여 좀 더 상세한 정보를 보여줄 수 있고 사용자와 대화까지도 가능함
백그라운드 알림 통지 객체 - 통지를 출력하려면 통지 관리자 (NotificationManager)와 통지 객체 (Notification)를 사용해야 함 - 먼저 어떤 내용을 어떻게 알릴지를 결정하기 위해 통지 객체를 생성하고 원하는 여러 가지 속성을 설정함
백그라운드 알림 통지 객체 - 통지 객체의 생성자는 다음과 같음 Notification(int icon, CharSequence tickertext, long when) - icon은 상태 영역에 표시될 작은 그림인데 통지의 내용을 상징할 수 있는 아이콘임 - tickertext는 통지 영역에 아이콘이 처음 나타날 때 잠시 출력될 짧은 문자열임 - 잠시만 보였다가 금방 사라지지만 통지 전달 시점에 화면을 보고 있다면 tickertext 을 통해 기본적인 메시지를 이해할 수 있음
백그라운드 알림 통지 객체 Notification(int icon, CharSequence tickertext, long when) - when은 통지가 발생한 시간을 지정하는데 System.currentTimeMillis ll 메소드를 메 를 이용해 얻은 현재 시간을 지정함 - 통지 객체를 생성한 후에도 icon, tickertext, when 등의 필드에 값을 직접 대입하여 통지의 내용을 변경할 수 있으며 실행 중에도 언제든지 이 값들은 변경 가능함
백그라운드 알림 통지 전달 방법 - 다음 필드들에 값을 대입함으로써 통지를 전달할 방법을 상세하게 지정함 필드 설명 number 통지 아이콘에 겹쳐서 출력될 숫자를 지정한다. 예를 들어 새로운 메시지가 도착했다는 통지라면 메시지의 개수를 같이 표시할 수 있다. sound 통지와 함께 출력할 소리를 Uri 객체로 지정한다. vibrate 진동 방식을 지정한다. 진동할 시간과 멈출 시간을 배열로 전달함으로써 진동 의 패턴을 지정한다. ledargb 불빛의 색상을 지정한다. 장비에 장착된 LED의 능력에 따라 표현 가능한 색 상은 조금 달라질 수도 있다. ledonms, ledoffms LED를 켤 시간과 끌 시간을 1/1000초 단위로 지정한다. 이 두 값은 LED의 점멸 주기를 결정한다. defaults 디폴트로 취할 통지 전달 방식을 지정한다. flags 통지의 동작 방식을 지정한다. 지정한다
백그라운드 알림 소리와 진동 기능 - 주로 소리나 진동 등을 같이 함 - 시스템은 디폴트 소리와 진동 기능을 제공하며, 어떤 기능을 시스템이 제공하는 디폴트로 사용할 것인가를 defaults 필드에 지정함 플래그 설명 DEFAULT_SOUND 소리를 발생시킨다. DEFAULT_VIBRATE 진동을 발생시킨다. DEFAULT_LIGHTS 불빛을 깜박거린다. DEFAULT_ALL 위 세 가지 동작을 모두 수행한다.
백그라운드 알림 소리와 진동 기능 - defaults 필드에 값을 대입하기만 하면 시스템이 제공하는 기능을 사용할 수 있으므로 별도의 리소스를 준비할 필요가 없음 - sound sound, vibrate 필드를 사용하면 소리나 진동도 원하는 대로 디자인 할 수 있음
백그라운드 알림 flags 필드 - flags 필드에는 통지의 동작 및 관리 방법을 지 정함 플래그 설명 FLAG_AUTO_CANCEL 사용자가 아이콘을 탭하면 자동으로 통지를 취소한다. FLAG_INSISTENT 취소하거나 상태 영역을 확장하기 전까지 소리를 계속 발 생시킨다. FLAG_NO_CLEAR 사용자가 clear all을 선택할 때 취소한다. FLAG_ONGOING_EVENT 계속 진행중인 이벤트를 참조한다. FLAG_ONLY_ALERT_ONCE 이전에 취소된 통지라도 매번 소리와 진동을 발생시킨다. FLAG_SHOW_LIGHTS LED 불빛을 출력한다.
백그라운드 알림 확장 상태 영역 표시 정보 - 속성을 설정한 후 확장 상태 영역에 표시될 정보와 사용자가 통지 객체를 선택했을 때의 반응을 다음 메소드로 지정함 void setlatesteventinfo (Context context, CharSequence contenttitle, CharSequence contenttext, PendingIntent contentitent) - 이 정보들은 상태 영역을 확장해야만 보이지만 생략할 수는 없음 - 상태 영역에 아이콘만 배치하는 간단한 방법은 지원하지 않으므로 확장 상태 영역과 선택시의 동작까지도 반 동작까지 반드시 시 지정해야 함
백그라운드 알림 확장 상태 영역 표시 정보 - 통지를 발생시킨 주체와 제목, 메시지 내용 문자열 등을 지정하고 통지 뷰를 탭했을 때 호출할 인텐트를 지정함 - 확장 상태 영역은 타이틀 영역보다는 넓으므로 조금 더 길고 상세한 메시지를 전달할 수 있음 - 생성자에게 미리 지정해 놓은 통지 아이콘과 시간은 별도의 지시가 없어도 자동으로 같이 표시됨
백그라운드 알림 PendingIntent 클래스 - PendingIntent 클래스는 인텐트를 래핑하며 다른 응용 프로그램으로 전달하여 실행 권한을 준다는 점에서 보통의 인텐트와 다름 - PendingIntent 는 시스템이 관리하며 인텐트를 만든 응용 프로그램이 종료되어도 유효함 - 생성자가 따로 정의되어 있지 않으므로 객체를 직접 생성할 수는 없고 다음 세 개의 정적 메소드 중 하나로 생성함 PendingIntent getactivity(context context, int requestcode, Intent intent, int flags) PendingIntent g getbroadcast(context context, int requestcode, g q Intent intent, int flags) g PendingIntent getservice(context context, int requestcode, Intent intent, int flags)
백그라운드 알림 통지 관리자 등록 - 인텐트는 사용자가 통지 객체를 탭했을 때의 동작을 지정함 - 주로 액티비티를 띄우는데 이 경우 인텐트에는 FLAG_ACTIVITY_NEW_TASK 플래그를 지정 해야 함 - 서비스의 경우는 직접 통지를 처리할 수 없으므 로 통지 후 사용자의 반응을 처리할 별도의 액 티비티를 미리 준비해 두어야 함 - 여기까지 통지 객체가 준비되었 준비되었으면 면 통지 관리자로 등록함
백그라운드 알림 통지 관리자 - 통지 관리자는 시스템이 제공하는 서비스이므로 객체를 직접 생성할 필요 없이 다음 호출문으로 구함 getsystemservice(notification_service) - 통지 관리자의 메소드는 통지를 등록하거나 취소하는 다음 세 개 뿐임 void notify (int id, Notification notification) void cancel (int id) void cancelall ( )
백그라운드 알림 통지 관리자 메소드 void notify (int id, Notification notification) void cancel (int id) void cancelall ( ) - notify 메소드의 첫번째 인수는 등록하고자 하는 통지 객체의 고유한 식별 번호임 - 한 프로그램이 여러 개의 통지를 동시에 보낼 수도 있으므로 서로 구분하기 위해서는 중복되지 않는 ID를 부여해야 함 - 이 ID는 이후 통지 객체의 아이콘을 변경하거나 취소할 때 사용됨 - 두 번째 인수는 미리 준비해 놓은 통지 객체임
통지 출력 예제 1. - 통지 기능을 이용한 낮잠 도우미 예제를 하나 만들어 봄 - 낮잠을 자기 전에 이 프로그램을 실행해 놓으면 원하는 시간이 경과한 후에 소리나 진동으로 사용자를 깨워줌 - 예제 테스트의 편의를 위해 5초 후에 통지를 보내도 록함 - 예제는 액티비티에서 통지를 출력하지만 서비스나 BR에서도 마찬가지 방법으로 사용가능함
통지 출력 예제 1. NapAlarm.java
통지 출력 예제 1. NapAlarm.java
통지 출력 예제 1. java 설명 - 레이아웃에는 낮잠 시작이라는 버튼 하나만 배치 되어 있음 - 이 버튼을 누르면 짧은 인사말을 보여주고(Toast 객체) 적당한 시간이 흐른 후에 통지 객체를 생성 하여 등록함 - 대기 시간이 길다면 알람이나 타이머를 사용하는 것이 정석이지만 이 예제의 경우는 시간이 짧으므로 postdelayed 메소드로 5초 후에 곧바로 통지를 출력하도록 함
통지 출력 예제 1. java 설명 - 리소스에 낮잠을 깨우는 나팔수 모양의 아이콘을 준비해 두었으며 티커 텍스트로 짧은 문자열을 등록함 - 통지 출력시 소리를 같이 발생시키며 일어날 때까지 시끄럽게 소리냄 - 일어나서 통지 아이콘을 클릭하면 NapEnd 액티비티를 호출하여 낮잠이 끝났음을 알림 - NapEnd 액티비티는 초기화할 때 통지 객체를 취소하고 취 하 버튼 클릭시 스스로 종 종료하는 하는 간단한 동작을 함
통지 출력 예제 1. NapEnd.java
통지 출력 예제 1. 결과
통지 출력 예제 1. 결과 5초후
통지 출력 예제 1. 결과 설명 - 낮잠 시작 버튼을 누르고 잠시 기다리면 상태 영역에 통지 객체(아이콘+ 일어나세요 )가 나타 남 - 통지를 등록한 프로그램이 아닌 임의의 프로그램이 실행중이더라도 통지는 출력됨 - 다른 프로그램 사용 중에도 사건 발생 여부를 알 수 있음 - 낮잠 시작 버튼을 누른 후 Home 버튼을 눌러 홈 스크린으로 린 이동해도 동작하며 Back 이동해 ac 버튼을 눌러 액티비티를 종료해도 동작함
통지 출력 예제 1. 결과 설명 - 지정한 시간이 되면 상태 영역에 짧은 티커 텍스트와 아이콘이 스크롤되며 나타났다가 티커 텍스트는 잠시 후 사라지고 아이콘만 남음 - 상태 영역이 넓지 못한데다 여러 개의 통지가 동시에 발생할 수도 있으므로 티커 텍스트는 항상 표시할 수 없음
통지 출력 예제 1. 결과 설명 - 사용자는 티커 텍스트를 보고 사건이 발생했음을 알게 되며 설사 티커 텍스트를 놓쳤다 하더라도 남아 있는 아이콘을 통해 언젠가는 확인하게 될 것임
통지 출력 통지 소리 및 진동 - 통지를 출력할 때 소리를 발생하도록 했는데 실제 어떤 소리가 발생할 것인가는 장비에 따라 달라지며, 달라지며 에뮬레이터(AVD)의 경우는 아무 소 리도 나지 않음 - 소리 외에 진동이나 불빛도 사용할 수 있는데 특히 낮잠을 깨우는 데는 진동이 효과적임 시스템의 디폴트 - 진동을 사용하려면 defaults에 에시 템의 디폴 진동 기능을 사용하라는 플래그를 같이 지정함 noti.defaults = (Notification.DEFAULT ( _SOUND Notification.DEFAULT_VIBRATE); );
통지 출력 통지 소리 및 진동 - vibrate 멤버에 진동의 패턴을 지정함으로써 커스텀 진동을 만들 수도 있음 - 패턴은 시간의 배열로 지정하는데 홀수 번째 요소는 진동할 시간이고 짝수 번째 요소는 진동하지 않고 쉬는 시간임 - 다음 코드는 길게 한번 진동하고 짧게 한번 진동한 후 잔 진동을 세 번 더 반복함 noti.vibrate = new long[ ] {1000,1000,500,500,200,200,200,200,200,200};
통지 출력 통지 소리 및 진동 - 만약 디폴트 진동이 지정되어 있으면 커스텀 진동 패턴은 무시됨 - 진동 기능을 사용하려면 매니페스트에 다음 퍼미션을 지정해야 함 - 퍼미션이 없을 경우 진동은 발생하지 않지만 그렇다고 해서 에러로 처리되지는 않고, 무시 됨 <uses-permission android:name= android.permission.vibrate />
통지 출력 통지 소리 및 진동 - 에뮬레이터는 진동을 지원하지 않으므로 화 면상으로는 아무런 변화가 없음 - 실제 장비로 테스트해 보면 통지 객체가 출력될 때 부르르르 떨며 아이콘을 누를 때까지 진동을 반복할 것임
통지 출력 예제 1. 결과 설명 - 여러 개의 사건이 동시에 일어날 때는 아이콘만 봐서 의미를 바로 알기 어려운데 이럴 때는 상태 영역을 드래그하여 확장해 보면 됨 - 상태 영역을 드래그하게 되면 좀 더 구체적인 설 명과 제목, 통지가 발생한 시간 등이 나타날 것임
통지 출력 예제 1. 상태 영역 확장 화면
통지 출력 예제 1. 결과 설명 - 확장된 상태 영역에서 통지 뷰를 택하면 미리 지정해 놓은 액티비티가 호출되며 상태 영역의 아이콘은 사라짐 - NapEnd는 실행되자마자 1번 통지 객체를 취소 하는데 통지 객체를 등록할 때 CANCEL 플래그를 FLAG G_ AUTO U O_C C 플래 를 지정해 놓았다면 사용자가 아이콘을 탭할 때 자동으로 취소되므로 이 코드는 굳이 필요치 않음
통지 출력 예제 1. NapEnd 결과
통지 출력 예제 1. NapEnd 결과 설명 - 버튼을 클릭하면 액티비티가 종료됨 사 자체가 간단하므로 하 통지를 받 받은 액티비티가 - 사건 단순함 - 만약 부재중 전화 통지에 대한 액티비티라면 전화 다시 걸기 정도의 정 의 기능을 제공해야 할 것임
안드로이드 마켓 개요 안드로이드 마켓 특징 - 안드로이드 마켓은 안드로이드 기기의 마켓 애플리케이션을 통해 접속 할 수 있음 - 마켓 애플리케이션은 안드로이드 기기에 기본 으로 탑재되므로 별도로 설치할 필요 없음
안드로이드 마켓 개요 안드로이드 마켓 필터링 - 안드로이드 마켓에서 애플리케이션의 열람이나 검색은 몇 가지 규칙에 따라 동작 - 예를 들면 특정 애플리케이션이 넥서스원의 트랙볼과 같은 장치를 필요로 할 경우, 경우 이러한 조건을 애플리케이션의 매니페스트 파일에 명시하면 트랙볼이 랙볼이 장착되지 않는 기기에서는 이 애플리케이션을 조회할 수 없도록 함
안드로이드 마켓 개요 개발자가 검색 조건을 명시하는 일 - 예를 들어 다음과 같이 supports-screens 엘리먼트를 매니페스트에 추가하면 화면 크기가 large인 안드로이드 기기에서는 애플리케이션이 보이지 않게 할 수 있음 (생략) <supports-screens android:smallscreens= true android:normalscreens= true android:largescreens= false android:anydensity= true /> (생략)
안드로이드 마켓 개요 개발자가 검색 조건을 명시하는 일 - 프로젝트를 생성할 때 SDK 버전을 명시해서 하위 버전이라면 애플리케이션이 마켓에서 보이지 않게 할 수 있음 <uses-sdk android:minsdkversion= 8 /> - 매니페스트에 등록할 수 있는 필터링 조건은 매우 다양하며 화면크기, SDK버전, 트랙볼의 유무 국가, 국가 이동통신 사업자, 사업자 SIM카드까지도 유무, 필터링 조건으로 사용됨
안드로이드 마켓 개요 마켓 필터링이 미치는 영향 - 애플리케이션 A가 1.0버전까지는 마켓에서 찾을 수 있었더라도 버전이 올라간 후 필터링 조건이 변경되면 그 다음 버전부터는 마켓에서 보이지 않을 수 있음 - 안드로이드 기기에 애플리케이션 B를 이미 설치 했다고 해도 애플리케이션 B가 버전업되고 더욱 엄격한 필터링이 적용되어서 사용할 수 없다면 마켓의 업그레이드 메시지는 나타나지 않음
안드로이드 마켓 등록 애플리케이션 판매를 위한 개발자 등록 - 안드로이드 마켓에 애플리케이션을 판매하려면 개발자로 등록해야 함 - 등록 비용은 현재 $25이며, 신용카드로 결재해야 하며 Gmail 계정이 필요 - 두 가지 모두 준비되었다면 다음 주소 입력 http://market.android.com/publish
안드로이드 마켓 등록 개발자 프로필을 입력한 다음 [계속] 버튼 클릭
안드로이드 마켓 등록 [계속] 버튼 클릭
안드로이드 마켓 등록 결재할 카드정보와 카 정 와 개인정보를 개인정 를 모두 두 입력한 다음
안드로이드 마켓 등록 [동의하 계속하기] 버튼 클릭 [동의하고
안드로이드 마켓 등록 로그인을 요구하는 페이지가 나타나므로 암호 입력
안드로이드 마켓 등록 결재가 진행 중임을 알리는 메시지 후 결재완료 페이지 나타남
안드로이드 마켓 등록 Gmail로 돌아가 메일함을 열면 위와 같은 메일이 도착했음을 확인 할 수 있지만 주문이 완료된 것은 아님. 아님 상황에 따라 곧장 결재가 될 때도 있지만 등록 진행 중인 상태로 기다려야 할 수도 있음
안드로이드 마켓 등록 결재 확인 대기 중임을 알리는 메시지
예제 참고문헌 본 교재의 예제는 저자의 허락을 받아 [안드로이드 프로그래밍 정복, 한빛미디어, 김상형 저]에서 가져왔습니다.