CODEDRAGON ㆍDevelopment/Android
인텐트
인텐트란 애플리케이션의 컴포넌트, 구체적으로 말하자면 액티비티, 서비스, 브로드캐스트리시버에게 작업을 요청하기 위해 필요한 데이터를 전달해주는 메시지에 해당하는 '전달 객체'로 보통 '인텐트 객체'라고 합니다.
인텐트 생성
명시적 인텐트 (Explicit Intent) | 호출 대상 컴포넌트의 이름이 명시되어 있는 인텐트 즉, 어떤 것을 호출해야 할지 명시되어 있는 인텐트 new Intent(Context packageContext, class cls); ex) new Intent(this,SampleActivity.class) |
암시적 인텐트 (Implicit Intent) | 호출 대상 컴포넌트가 정확히 정해진 것이 아니라, 호출 대상 컴포넌트의 특성만 나열되어 있는 인텐트 new Intent(String action, Uri uri); ex) Uri tel=Uri.parse("tel:01056781234"); new Intent(Intent.ACTION_DIAL,tel); |
인텐트 호출
startActivity() | startActivity(new Intent(Intent.Action_DIAL,tel)); |
startActivityForResult() | //호출 private Static final int PICK_REQUEST=1337; .... String str=Uri.parse(type.getText().toString()); Intent intent=new Intent(Intent.ACTION_PICK,str); startActivityForResult(intent,PICK_REQUEST);
//실행된 액티비티가 종료되면 onActivityResult() 메소드가 호출 protected void onActivityResult(int requestCode,int resultCode,Intent data){ if(requestCode==PICK_REQUEST){ if(resultCode==RESULT_OK){ startActivity(new Intent(Intent.ACTION_VIEW,data.getData())); } } } |
인텐트로 데이터 전달
인텐트로 호출할 액티비티에 전송할 데이터 셋팅
Intent intent=new Intent(this,IntentCallee.class); intent.putExtra("name","전송할 문자열"); <- 전송할 문자열 셋팅 startActivity(intent);
실행된 액티비티에서 인테트를 호출한 후 문자열 추출
Intent intent=getIntent(); String name=intent.getExtras().getName("name").toString(); ß 전송된 문자열 추출 |
인텐트의 구성 요소
인텐트의 종류와 구성 요소
명시적 인텐트 | 암시적 인텐트 |
컴포넌트 이름 | 액션(Action) |
| 카테고리(Category) |
| 데이터(Data) |
| 데이터 타입(MIME Type) |
| 엑스트라(Extras) |
컴포넌트 이름
애플리케이션 내 클래스 이름 또는 애플리케이션의 AndroidManifest.xml 파일에서 설정된 패키지 이름과 클래스 이름의 조합입니다.
컨포넌트 이름은 setComponent(), setClass(), 또는 setClassName() 메서드에 의해 설정되고 getComponent()에 의해 읽혀지게 됩니다.
Action(행동)
인텐트 액션은 수행되어야 하는 작업 내용으로 인텐트 액티비티 액션과 브로드캐스트 액션으로 나뉩니다.
액티비티 액션 | 액티비티를 호출하겠다는 액션 |
브로드캐스트 액션 | 브로드캐스트리시버를 호출하겠다는 액션 |
액티비티 액션
액션 상수 | 설명 |
ACTION_MAIN | 시작하는 액티비티를 지정합니다. |
ACTION_VIEW | 인텐트에 첨부되는 데이터의 URI가 가리키는 데이터를 사용자에게 보여주라는 액션입니다. |
ACTION_EDIT | 인텐트에 첨부되는 데이터의 URI가 가리키는 데이터를 변경하라는 액션입니다. |
ACTION_DELETE | 인텐트에 첨부되는 데이터의 URI가 가리키는 데이터를 삭제하라는 액션입니다. |
ACTION_DEFAULT | ACTION_VIEW와 동일합니다. |
ACTION_PICK | 데이터에서 하나(URI)를 선택하여 정보를 반환하라는 액션입니다. |
ACTION_GET_CONTENT | 데이터에서 하나의 컨텐트를 선택하여 반환하라는 액션으로 액티비티에 의하여 신규 작성한 데이터를 반환하는 것도 가능합니다. |
ACTION_RUN | 데이터를 실행시키는 액션입니다. |
ACTION_INSERT | 빈 아이템을 작성하라는 액션입니다. |
ACTION_CALL | 전화 연결을 요청하는 액션입니다. 실제로 전달된 전화 번호로 전화를 겁니다. |
ACTION_DIAL | 전화 연결을 요청하는 액션입니다. 전화 다이얼패드 화면으로 이동합니다. |
ACTION_SENDTO | 데이터의 메시지를 보내라는 액션입니다. |
ACTION_ANSWER | 전화 착신에 관한 액션입니다. |
ACTION_SYNC | 데이터와 서버의 데이터를 동기화하라는 액션입니다. |
인텐트 객체의 액션을 설정하는 메서드로 setAction()에 의해 설정될 수 있으며, getAction()메서드에 의해서 읽게 된다.
브로드캐스트 액션
브로드캐스트 액션 상수 | 설명 |
ACTION_BATTERY_CHANGED | 배터리 잔량의 변화를 알림 |
ACTION_BATTERY_LOW | 배터리 부족 경고 |
ACTION_BOOT_COMPLETED | 시스템 부팅 완료 알림 |
ACTION_DATE_CHANGE | 날짜 변경 알림 |
ACTION_HEADSET_PLUG | 헤드셋이 디바이스에 연결되었거나 또는 분리되었다는 것을 알림 |
ACTION_PACKAGE_ADDED | 애플리케이션 패키지 추가 시 알림 |
ACTION_PACKAGE_REMOVED | 애플리케이션 패키지 제거 시 알림 |
ACTION_SCREEN_ON | 스크린이 켜졌음을 알림 |
ACTION_TIMEZONE_CHANGED | 타임존 변경 시 알림 |
ACTION_TIME_CHANGED | 시간 지정 시 알림 |
ACTION_TIME_TICK | 매시간 변경 시 알림 |
Category(분류)
인텐트를 수신하여야 할 컴포넌트의 종류에 대한 정보를 포함하는 문자열을 정의합니다. 주로 수신받을 액티비티와 관련되어 안드로이드에서 몇 가지의 카테고리 상수를 제공하고 있습니다.
카테코리 상수 | 설명 |
CATEGORY_BROWSABLE | 타켓 액티비티는 링크에 의해 참조되는 데이터(예를 들어 이미지나 이메일 메시지)를 보여주기 위해 브라우저가 호출 되어야 합니다. |
CATEGORY_HOME | 디바이스가 켜질 때, HOME 키가 눌렸을 때 사용자가 보게되는 첫 번째 화면인 액티비티의 홈 화면을 보여주는 액티비티가 되어야 합니다.. |
CATEGORY_LAUNCHER | 액티비티는 하나의 태스크에서 최초로 생성된 액티비티가 되며, 최상위 계층의 애플리케이션으로 시작됩니다. |
CATEGORY_PREFERENCE | 타깃 액티비티는 설정 프레퍼런스입니다. |
Data(데이터)
Data는 호출 대상 액티비티가 처리해 주었으면 하는 데이터 "주소"입니다.(실제 데이터가 아닙니다)
이러한 주소는 URI(Uniform Resource Identifier) 형식으로 정의되어 있으며, 전화번호, 웹 주소 등 다양한 형태가 있습니다.
예) 액션이 'ACTION_DIAL'이라면, 데이터 필드는 통화해야 할 전화번호를 가진 'tel:URI'을 가져야 합니다.
MIME Type(종류)
- 인텐트 객체 내의 데이터는 데이터의 "주소"만을 나타낼 뿐, 주소 자체에서 해당 URI가 가리키는 데이터의 종류가 어떤 것인지는 알 수가 없습니다.
- 실제 데이터의 종류가 음악이 될 수도 있고, 영상이 될 수도 있고, 연락처, 메모 등 어떤 것이든 될 수 있습니다. 즉, Type은 데이터의 "종류"를 지정하여 인텐트 해석 과정에서 정확하게 대상 컨포넌트를 찾을 수 있도록 해 줍니다.
Extra(추가 정보)
인텐트는 엑스트라(Extras)에 필요한 값을 입력하면 안드로이드는 엑스트라 값을 번들(bundle) 객체로 바꿉니다. 위에서 만들어진 번들 객체는 인텐트를 사용하여 애플리케이션 컴포넌트를 호출할 때 해당 컴포넌트에 전달됩니다.
플래그
다양한 종류의 플래그(Flags)는 대부분 안드로이드 시스템에게 액티비티를 시작시키는 방법과 시작 이후 액티비디를 다루는 방법을 알려줍니다.
Intent i = new Intent(this, Test.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(i); |
플래그 | 설명 |
FLAG_ACTIVITY_CLEAR_TOP | 실행할 액티비티가 태스크에 이미 있다면 태스크에 있는 동일한 액티비티부터 최상단의 액티비티까지 모두 제거하고 새로운 액티비티를 실행하는 플래그입니다. 그래서 태스크 스택에 A, B, C, D가 있을 때, 이 플래그를 지정해서 B를 호출하면 B, C, D가 모두 스택에서 제거됩니다. 그리고 새로운 B 액티비티가 스택에 추가됩니다. |
FLAG_ACTIVITY_SINGLE_TOP | 실행할 액티비티가 태스크 스택 최상단에 이미 있다면 액티비티를 다시 실행하지 않는 플래그입니다. 다시 실행하지 않는다는 것은 태스크에 존재하는 액티비티를 재사용한다는 것을 의미합니다. 재사용한다는 것은 액티비의 많은 리소스와 사용자가 입력했던 데이터들을 그대로 유지할 수 있다는 것을 의미합니다 |
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | 사용자가 홈 스크린이나 "최근 실행 액티비티 목록"에서 태스크를 시작할 경우 시스템이 설정하는 플래그입니다. 이 플래그는 새로 태스크를 시작하거나 백그라운드 태스크를 포그라운드로 가지고 오는 경우가 아니라면 영향을 주지 않습니다. "최근 실행 액티비티 목록" 홈 키를 오랫동안 눌렀을 때 보여지는 액티비티 목록입니다. |
FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET | 태스크를 재시작할 때 액티비티를 종료할 수 있도록 액티비티에 표시를 하는 플래그입니다. 이 플래그에 의해 표시된 액티비티들은 태스크가 백그라운드에 있다가 포그라운드(전면)에 보이게 될 때 태스크 스택에서 제거됩니다. 단, 해당 태스크는 FLAG_ACTIVITY_RESET_TASK_IF_NEEDED 플래그가 설정되어 있어야 합니다. |
FLAG_ACTIVITY_NEW_TASK | 실행한 액티비티와 관련된 태스크가 존재하면 동일한 태스크 내에서 실행하고, 그렇지 않으면 새로운 태스크에서 액티비티를 실행하는 플래그입니다. |
FLAG_ACTIVITY_MULTIPLE_TASK | 액티비티를 항상 새로운 태스크에서 실행하는 프래그이며, FLAG_ACTIVITY_NEW_TASK와 함께 사용해야 동작합니다. |
FLAG_ACTIVITY_CLEAR_TASK | 태스크를 초기화하는 플래그입니다. 액티비티가 이 플래그와 함께 호출되면 태스크에 존재하던 다른 액티비티는 모두 종료됩니다. 이 플래그는 반드시 FLAG_ACTIVITY_NEW_TASK 플래그와 함께 사용되어야 합니다. |
FLAG_ACTIVITY_FORWARD_RESULT | 액티비티 처리 결과를 전달할 수 있는 플래그입니다. 액티비티에서 다른 액티비티를 호출해서 결과 값을 받고 싶을 때 사용하는 것이 startActivityForResult(), setResult(), onActivityResult()메서드입니다. |
FLAG_ACTIVITY_NO_HISTORY | 실행한 액티비티를 태스크 스택에서 관리하지 않도록 해주는 플래그입니다. |
FLAG_ACTIVITY_REORDER_TO_FRONT | 실행한 액티비티가 태스크에 이미 존재하는 액티비티라면 새로 실행하지 않고 태스크에 있는 액티비티를 스택 최상단으로 옮기는 플래그입니다. |
FLAG_ACTIVITY_NO_ANIMATION | 액티비티 전환 시 애니메이션을 사용하지 않게 하는 플래그입니다. |
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | "최근 실행 액티비티 목록"에 보이지 않도록 하는 플래그입니다." 최근 실행 익티비티 목록"은 홈 키를 오랫동안 눌렀을 때 보여지는 액티비티 목록입니다. |
FLAG_ACIVITY_BROUGHT_TO_FRONT | 태스크 스택에 있는 액티비티가 다시 실행되었을 때 시스템이 설정하는 플래그입니다. |
FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY | 액티비티가 "최근 실행 액티비티 목록"에서 실행될 경우 시스템이 설정하는 플래그입니다. |
'Development > Android' 카테고리의 다른 글
MainActivity.java에 Activity 추가하기 (0) | 2014.07.03 |
---|---|
ActivityIntentDemo-Intent를 통한 화면이동 및 데이터 전달 (0) | 2014.07.03 |
ActionBarDemo2-액션바에 메뉴 등록후 메뉴항목 선택시 토스트 메시지 출력 (0) | 2014.07.02 |
ActionBarDemo-ActionBar형태 확인 및 테스트 (0) | 2014.07.02 |
MenuByXMLDemo-XML로 메뉴 읽어와 표시하기 (0) | 2014.07.02 |