Intent
목차 Intent Intent를 이용해 Activity 띄우기 Activity간 통신 Intent Filter Intent Resolution
Intent 어떠한 액션이 수행되어야 한다는 의향을 선언할 수 있도록 해주는 메시지 전달 메커니즘
do something YourActivity Intent 용도 Activity를 명시적으로 시작 Activity를 암시적으로 시작 … do something YourActivity Android Intent(do something) Intent(do something) Intent(result) Intent(result) YourActivity MyActivity
Intent를 이용해 Activity 시작하기 명시적으로 시작(Explicit intent)
Intent를 이용해 Activity 시작하기 암시적으로 시작(Implicit intent) 안드로이드는 지정된 데이터 타입에 대한 액션 수행에 가 장 적합한 클래스로 그 Intent를 런타임에 해결함 빌려 사용하는 기능이 어떤 애플리케이션의 것인지 미리 정확히 알지 않아도 다른 애플리케이션에 있는 기능을 사 용하는 프로젝트 작성 가능
Implicit intent 응용 Text를 전송할 때 Intent intent = new Intent(Intent.ACTION_SEND); intent.putExtra(Intent.EXTRA_TEXT, "Text"); intent.setType("text/plain"); startActivity(intent);
Action 실행하고자 하는 동작이며 Intent를 통해 어떤 작 업을 수행할 지를 지정한다. 액션 설명 ACTION_CALL 통화를 시작한다. ACTION_EDIT 데이터를 표시하고 편집한다. ACTION_MAIN 메인 엑티비티를 실행한다. 입출력되는 데이터는 없다. ACTION_VIEW 가장 일반적인 액션으로, Intent의 URI에 제공된 데이터가 가장 합리적인 방법으로 보여지도록 요청한다. ACTION_DIAL 인텐트의 URI에 지정된 번호로 전화를 걸 수 있도록 번호를 미리 눌러놓는다.
StartActivity & StartActivityForResult 하나의 Activity에서 다른 Activity를 호출하고자 할 때 startActivity(myIntent) myIntent 오픈할 클래스를 명시적으로 지정 혹은 수행되어야 하는 대상인 액션을 포함 startActivityForResult 실행 한 Activity가 종료되었을 때 실행한 Activity로부터 어 떠한 결과를 받고자 할 때 사용한다.
startActivity Android YourActivity MyActivity … do something YourActivity Android startActivity(intent) onCreate(intent) YourActivity MyActivity
startActivityForResult & setResult MyActivity YourActivity startActivityForResult SetResult() onActivityResult() Finish()
Activity간의 통신 Intent는 액티비티간에 인수와 리턴 값을 전달하 는 도구로도 사용된다. Bundle 타입의 Extras를 활용하여 이름과 값의 쌍 으로 된 임의 타입의 정보를 원하는 개수만큼 전달 할 수 있다. Intent putExtra(String name, int value) Intent putExtra(String name, String value) Intent putExtra(String name, boolean value) name은 전달하는 인수에 대한 이름이 중복되지 않으면 자유롭게 붙일 수 있다.
Activity간의 통신(2) Extras에 저장된 값들은 아래의 메서드로 꺼낸다. Int getIntExtra(String name, int defaultValue); String getIntExtra(String name); boolean getIntExtra(String name, boolean defaultValue);
통신 예제(StartActivity) – Main.java
통신 예제(StartActivity) – Sub.java
activity_main.xml activity_sub.xml
통신 예제
통신 예제(StartActivityForResult) - main
통신 예제(StartActivityForResult) – sub
activity_main.xml activity_sub.xml
통신 예제
Data 동작에 필요한 상세 데이터를 제공한다. 전화걸기 액션의 경우 ‘tel:010xxxxxxx’ 홈페이지 이동 액션의 경우 ‘http://주소’ 단독 액션의 경우 별도의 Data가 필요없으나 대부 분의 액션은 목적어가 필요하며 이 목적어에 해당 하는 정보가 Data이다. ex) ACTION_CALL에 대해서 누구에게 전화를 걸 것인지 를 지정
액션 예제 – CallOther.java
액션 예제 – activity_callother.xml
액션 예제 - 실행결과
Intent Filter 수 많은 인텐트들 중에 자신에게 필요한 인텐트만을 받 기 위해 인텐트 필터가 존재함. Manifest파일의 intent-filter 태그를 이용함
Intent Filter 하위 엘리먼트 action - 서비스되는 액션의 이름 android:name 속성 이용 category - 액션이 서비스되는 상황 조건 지정 속성 설명 ALTERNATIVE 이 액션이 데이터 타입의 항목에 대해 수행되는 기본 액션에 대한 대안으로 사용될 수 있어야 함을 지정 ex) 연락처의 기본 액션은 해당 연락처를 보여주는 것, 대안은 편집, 삭제 SELECTED_ALTERNATIVE 가능한 것들의 리스트가 필요할 때 DEFAULT Intent Filter에 의해 정의된 데이터 값에 대한 기본 액션. 명시적 인텐트를 이용해 띄어지는 액티비티 HOME 장치가 시작될 때 맨 처음 표시되는 액티비티 LAUNCHER 선택되어 지정된 어떤 데이터도 없이 액티비티를 런치함
Intent Filter 하위 엘리먼트(2) data – 컴포넌트가 실행할 수 있는 데이터에 대한 명세를 지정할 수 있게 함 속성 설명 android:host 유효한 호스트의 이름을 지정 ex) google.com android:mimeType 컴포넌트가 다룰 수 있는 데이터의 종류를 지정 android:path URI를 위한 유효한 경로 값을 지정한다 android:port 지정된 호스트를 위한 유효한 포트를 지정 android:scheme ex) content, http
Intent Filter 등록 예
Intent Resolution 암시적 인텐트를 전달하면 해석 과정을 거쳐 보통 하나의 Activity가 결정됨 지정된 데이터에 대해 주어진 액션을 수행할 수 있 는 Activity가 여러 개 존재하는 경우, 이들 중 최 적의 Activity를 찾는다.