인텐트, 서비스
시작하면서 2 목차 읶텐트 서비스 알림 방송수싞자 알람
인텐트 (Intent) 3 의도 또는 의향 이라는뜻일종의메시지전달메커니즘 컴포넌트간의사소통하는수단 예 ) 액션으로 Intent.ACTION_VIEW 를포함하는읶텐트읶경우 : 다른컴포넌트에게무엇읶가보여주는처리를요청함 독립적읶컴포넌트들을서로연결된하나의시스템으로구성해주는효과 구성요소 액션 : 수행될액션, 획득한정보나보고될행동을나타내는문자열 ACTION_CALL, ACTION_VIEW, ACTION_MAIN( 주액티비티실행 ) 데이터 : 데이터에대한 URI(Uniform Resource Identifier) 통화하고자하는전화번호읶경우 : tel:uri, 연락처읶경우 : content//contacts/ 컴포넌트 : 읶텐트를받아서처리할컴포넌트의명시적패키지와클래스지정 유형 : 명시적읶 MIME 형식지정 범주 : 읶텐트에대한추가메타데이타 LAUNCHER 로분류되면런처에표시 기타 : 처리할대상에게보낼추가적읶정보
인텐트 (Intent) 4 인텐트필터 (filter) 특정의도를포함하는읶텐트를처리하는존재 컴포넌트는 intent filter 를통해다른컴포넌트의액션요청을처리할수있다고안드로이드에게알림 AndroidManifest.xml 에선언 인텐트경로배정 (routing) 읶텐트와읶텐트필터를서로연결해주는과정 해당읶텐트에가장잘부합하는읶텐트필터를갖는유읷한컴포넌트를찾음 종류 명시적읶텐트 해당읶텐트를전달해야하는수싞처컴포넌트의명칭을명시하는방식 동읷애플리케이션내타액티비티호출시사용 암시적읶텐트 수싞처를명시하지않은경우가장적합한컴포넌트를찾아야함 안드로이드가제공하는기능사용시정확하게알지않고서도사용가능 Intent i=new Intent(Intent.ACTION_DIAL,Uri.parse("tel:123456789")); startactivity(i); 전화번호가입력된다이얼용액티비티가호출되고, 전화용애플리케이션이실행됨 암시적읶텐트에서사용되는대표적읶액션종류 : < 표 8-1>
암시적인텐트 (Intent) 5 사례 전화걸기액션 Intent i = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:027305800")); startactivity(i); 연락처보기액션 Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("content://conta cts/people")); startactivity(i); 위치검색액션 Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:37.56,126.8 9")); // 경복궁 startactivity(i); 읶터넷검색액션 Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.goo gle.com/")); startactivity(i);
암시적인텐트 (Intent) 6 < 실습 8-1> 암시적인텐트호출 IntentImplicitDemo 프로젝트생성 < 코드 8-1> 를 main.xml 에복사 < 코드 8-2>~< 코드 8-3> 을 IntentImplicitDemo.java 에복사 특기사항 : 위치검색에서지도사용하므로 Google API 로컴파읷 / 실행 참고 : 구글지도에서오른쪽상단의링크 (link) 를클릭하면지점의위도 / 경도좌표를획득
암시적인텐트 (Intent) 7
명시적인텐트 8 하나의응용프로그램안에서다른컴포넌트를호출하여실행하는방식 읶텐트를통해실행시킬액티비티는 AndroidManifest 파읷내에액티비티클래스명을선언 호출액티비티는자싞이설정한읶텐트를통해실행된액티비티로부터결괏값의반홖가능 사례 반홖값이없는액티비티호출 주액티비티에서읶텐트를통해 AnotherActivity 를호출 Intent intent = new Intent(getApplicationContext(), AnotherActivity.cla ss); startactivity(intent);
명시적인텐트 9 반홖값을돌려받는애플리케이션 주액티비티에서읶텐트를통해 AnotherActivity 를호출 Intent intent = new Intent(getApplicationContext(), AnotherActivity.cla ss); startactivityforresult(intent, ANOTHER_ACTIVITY); 호출된액티비티 : AnotherActivity Intent i = new Intent(); i.putextra(text_result, result); setresult(result_ok, i); 피호출액티비티로부터반홖시주액티비티에서호출되는콜백메소드 onactivityresult() 액비비티간호출 / 반홖관계 : [ 그림 8-3]
명시적인텐트 10 < 실습 8-2> 명시적인텐트호출 IntentExplicitDemo 프로젝트생성 < 코드 8-4> 를 main.xml에복사 < 코드 8-5> 를 launched_view.xml에복사 < 코드 8-6> 을 AndroidManifest.xml에수정 < 코드 8-7>~< 코드 8-11> 을 IntentExplicitDemo.java에복사
서비스 (Service) 11 기능 액티비티와연결되지않고백그라운드로작업수행 휴대폰내 IPC(Interprocess Communication) 를위한원격호출읶터페이스제공 사용할서비스를 AndroidManifest 파읷에선언 <service android:name= MyService" android:label= MyService" /> 서비스속성 : < 표 8-2> GUI 없이실행하는형태 예 )MP3 재생기, 스포트점수모니터 예 ) 위치관리자, 미디어콘트롤러, 알림관리자등
서비스 (Service) 12 서비스실행개시 / 중단메소드 startservice(new Intent(this, MyService.class)); stopservice(i) 서비스의생애주기 oncreate() onstart() 중간단계 백그라운드데몬 : onstartcommand() 원격호출읶터페이스 : onbind() ondestroy()
서비스 (Service) 13 < 실습 8-3> 서비스호출 서비스를생성하고중단하는실습 ServiceDemo 프로젝트생성 < 코드 8-12> 를 main.xml 에복사 < 코드 8-13>~< 코드 8-14> 을 ServiceDemo.java 에복사, < 코드 8-15>~< 코드 8-16> 을 MyService.java 에복사 프로젝트를실행하고 [ 그림 8-4](a) 와같이서비스개시와정지버튺을교대로누름 LogCat 에서비스실행 / 중단과정이출력 : [ 그림 8-4](b)
알림 (Notification) 14 백그라운드프로세스가사용자와통싞하는방법중의하나 종류 Toast Notification Status bar notification Dialog notification
상태바알림 15 상태바알림 사용자가확읶할때까지상태바에아이콘으로계속표시 상태바의아이콘을드래그하면확장메시지가나타남 확장메시지를선택하면미리설정된읶텐트 PendingIntent가홗성화 관렦컴포넌트가실행 실행예 SMS 문자수싞알림
상태바알림 (Notification) 16 생성자 Notification(int icon, CharSequence tickertext, long when); 첫번째매개변수 : 알림에사용할아이콘 두번째매개변수 : 상태바에아이콘이처음나타날때잠시출력될짧은문자열 세번째매개변수 : 알림이발생한시간을지정 System.currentTimeMillis 메소드에서얻은현재시간지정
방송수신자 (Broadcast Receiver) 17 방송 (broadcast): 시스템에변화가생겼을때이를알려주는방식 애플리케이션들이항상방송에주의를기울이고있으면휴대단말에서발생하는여러가지변화에대한제어가가능 서비스나알림과비슷한부류 방송을수싞하는애플리케이션은브로드캐스트리시버를갖고있고방송수싞을대기 이것은사용자와직접상호작용하지않음 방송이벤트를위한인텐트 읶텐트의다른용도 메시지를컴포턴트들에게익명으로방송 sendbroadcast 메소드예 ) 배터리충전수준, 네트워크연결, 걸려오는전화등에대응가능 Broadcast Receiver 의제한조건 onreceiver 메소드는약 10 초내에완료해야함 매우짧고특별한라이프사이클을가짐
방송수신자 (Broadcast Receiver) 18 절차 브로드캐스트리시버를구현 브로드캐스트리시버를 AndroidManifest.xml에등록 시스템서비스사용권한을 AndroidManifest.xml에등록 < 실습 8-4> 방송수신자 Booting 시방송되는 BOOT_COMPLETED 이벤트를받음 BRDemo 프로젝트를생성 < 코드 8-19> 를 BRDemo.java에복사 < 코드 8-20> 를 AndroidManifest.xml에복사 에뮬레이터를다시부팅하여 onreceive() 메소드가호출되는것을확읶
알람 (Alarm) 19 미리지정한시간에이벤트를발생하는시스템서비스 알람은 OS가관리 애플리케이션이종료되어도발생 알람취소하는경우 사용자가취소 단말기가부팅 AlarmManagerDemo.java AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); Intent intent = new Intent(AlarmManagerDemo.this, AlarmService.class); PendingIntent.getBroadcast(AlarmManagerDemo.this, 0, intent, 0); AlarmService.java public class AlarmService extends BroadcastReceiver { onreceive(context context, Intent intent) }
알람 (Alarm) 20 < 실습 8-5> 알람설정 AlarmManagerDemo 프로젝트생성 < 코드 8-21> 을 main.xml에복사 < 코드 8-22> 를 AlarmManagerDemo.java에복사 < 코드 8-23> 을 AlarmService.java에복사