인텐트는 액티비티(activity), 서비스(service), 브로드캐스트(broadcast receiver)를 실행하게끔 하는 비동기 메시지를 말한다. 인텐트는 실제로는 Intent 객체를 나타내며 아래와 같은 요소로 구성 된다.
인텐트 요소 |
내용 |
Component name |
인텐트, 옵션(보통 액션으로부터 유추 할 수 있는), 타입, 그리고 카테고리를 사용하기 위한 명시적 패키지와 클래스 지정 |
Action |
액션을 가리키는 공인된 문자열 |
Data |
URI 형태로 표현되는 작업을 위한 데이터 |
Category |
인텐트에 대한 추가 메타 데이터 |
Extras |
추가 데이터를 번들 형태의 인텐트로 전달 |
Flags |
Activity를 실행시키고 다루는것에 대한 다양한 종류의 플래그 |
인텐트는 두 그룹으로 나눌 수 있다. 하나는 명시적 인텐트(Explicit Intent)이고 다른 하나는 묵시적 인텐트(Implicit Intent)이다. 명시적 인텐트는 이름을 통해 타겟 컴포넌트를 지정하는 방식이다. 묵시적 인텐트는 타겟 컴포터넌트의 지정 없이 플랫폼에서 컴포넌트를 결정한다. 이때는 인텐트의 액션(action), 데이터(data), 카테고리(category)를 사용하여 결정하며 이를 인텐트 레졸루션(Intent resolution)이라고 한다.
액티비티, 서비스, 브로드캐스트 리시버는 자신들이 어떤 묵시적 인텐트를 다룰 수 있는지 시스템에 알리기 위해 하나 이상의 인텐트 필터(Intent Filter)를 가질 수 있다. 각 인텐트 필터는 해당 컴포넌트에서 받을 수 있는 인텐트들의 집합을 묘사한다.
======================================================================================================================================
스마트폰 OS인 Android에서 Intent 관련 사항을 정리 한다.
목차[숨기기] |
Intent 개요
- Intent 정의
- 원하는 실제 행동을 호출할 때 사용하는 객체
- 애플리케이션에서 다른 모듈의 기능을 호출할 때 사용하는 객체
- Intent 핸들러(Activity, Service, BroadcastReceiver)에 의해서 처리됨
public class android.content.Intent implements Parcelable
- 구성
- Component가 Data와 Type로 지정된 대상에 대해 Category와 Action으로 지정된 행위를 한다. 추가적인 정보는 Extras로 제공 한다.
Category |
CATEGORY_DEFAULT = "android.intent.category.DEFAULT"; CATEGORY_BROWSABLE = "android.intent.category.BROWSABLE"; CATEGORY_ALTERNATIVE = "android.intent.category.ALTERNATIVE"; CATEGORY_SELECTED_ALTERNATIVE = "android.intent.category.SELECTED_ALTERNATIVE"; CATEGORY_TAB = "android.intent.category.TAB"; CATEGORY_LAUNCHER = "android.intent.category.LAUNCHER"; CATEGORY_INFO = "android.intent.category.INFO"; CATEGORY_HOME = "android.intent.category.HOME"; CATEGORY_PREFERENCE = "android.intent.category.PREFERENCE"; CATEGORY_DEVELOPMENT_PREFERENCE = "android.intent.category.DEVELOPMENT_PREFERENCE"; CATEGORY_EMBED = "android.intent.category.EMBED"; CATEGORY_MONKEY = "android.intent.category.MONKEY"; CATEGORY_TEST = "android.intent.category.TEST"; CATEGORY_UNIT_TEST = "android.intent.category.UNIT_TEST"; CATEGORY_SAMPLE_CODE = "android.intent.category.SAMPLE_CODE"; CATEGORY_OPENABLE = "android.intent.category.OPENABLE"; CATEGORY_FRAMEWORK_INSTRUMENTATION_TEST = "android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST"; CATEGORY_CAR_DOCK = "android.intent.category.CAR_DOCK"; CATEGORY_DESK_DOCK = "android.intent.category.DESK_DOCK"; |
Action |
ACTION_MAIN = "android.intent.action.MAIN"; ACTION_VIEW = "android.intent.action.VIEW"; ACTION_DEFAULT = "android.intent.action.VIEW"; ACTION_ATTACH_DATA = "android.intent.action.ATTACH_DATA"; ACTION_EDIT = "android.intent.action.EDIT"; ACTION_INSERT_OR_EDIT = "android.intent.action.INSERT_OR_EDIT"; ACTION_PICK = "android.intent.action.PICK"; ACTION_CREATE_SHORTCUT = "android.intent.action.CREATE_SHORTCUT"; ACTION_CHOOSER = "android.intent.action.CHOOSER"; ACTION_GET_CONTENT = "android.intent.action.GET_CONTENT"; ACTION_DIAL = "android.intent.action.DIAL"; ACTION_CALL = "android.intent.action.CALL"; ACTION_SENDTO = "android.intent.action.SENDTO"; ACTION_SEND = "android.intent.action.SEND"; ACTION_SEND_MULTIPLE = "android.intent.action.SEND_MULTIPLE"; ACTION_ANSWER = "android.intent.action.ANSWER"; ACTION_INSERT = "android.intent.action.INSERT"; ACTION_DELETE = "android.intent.action.DELETE"; ACTION_RUN = "android.intent.action.RUN"; ACTION_SYNC = "android.intent.action.SYNC"; ACTION_PICK_ACTIVITY = "android.intent.action.PICK_ACTIVITY"; ACTION_SEARCH = "android.intent.action.SEARCH"; ACTION_SYSTEM_TUTORIAL = "android.intent.action.SYSTEM_TUTORIAL"; ACTION_WEB_SEARCH = "android.intent.action.WEB_SEARCH"; ACTION_ALL_APPS = "android.intent.action.ALL_APPS"; ACTION_SET_WALLPAPER = "android.intent.action.SET_WALLPAPER"; ACTION_BUG_REPORT = "android.intent.action.BUG_REPORT"; ACTION_FACTORY_TEST = "android.intent.action.FACTORY_TEST"; ACTION_CALL_BUTTON = "android.intent.action.CALL_BUTTON"; ACTION_VOICE_COMMAND = "android.intent.action.VOICE_COMMAND"; ACTION_SEARCH_LONG_PRESS = "android.intent.action.SEARCH_LONG_PRESS"; ACTION_POWER_USAGE_SUMMARY = "android.intent.action.POWER_USAGE_SUMMARY"; ACTION_SCREEN_OFF = "android.intent.action.SCREEN_OFF"; ACTION_SCREEN_ON = "android.intent.action.SCREEN_ON"; ACTION_USER_PRESENT = "android.intent.action.USER_PRESENT"; ACTION_TIME_TICK = "android.intent.action.TIME_TICK"; ACTION_TIME_CHANGED = "android.intent.action.TIME_SET"; ACTION_DATE_CHANGED = "android.intent.action.DATE_CHANGED"; ACTION_TIMEZONE_CHANGED = "android.intent.action.TIMEZONE_CHANGED"; ACTION_BOOT_COMPLETED = "android.intent.action.BOOT_COMPLETED"; ACTION_CLOSE_SYSTEM_DIALOGS = "android.intent.action.CLOSE_SYSTEM_DIALOGS"; ACTION_PACKAGE_INSTALL = "android.intent.action.PACKAGE_INSTALL"; ACTION_PACKAGE_ADDED = "android.intent.action.PACKAGE_ADDED"; ACTION_PACKAGE_REPLACED = "android.intent.action.PACKAGE_REPLACED"; ACTION_PACKAGE_REMOVED = "android.intent.action.PACKAGE_REMOVED"; ACTION_PACKAGE_CHANGED = "android.intent.action.PACKAGE_CHANGED"; ACTION_PACKAGE_RESTARTED = "android.intent.action.PACKAGE_RESTARTED"; ACTION_PACKAGE_DATA_CLEARED = "android.intent.action.PACKAGE_DATA_CLEARED"; ACTION_UID_REMOVED = "android.intent.action.UID_REMOVED"; ACTION_WALLPAPER_CHANGED = "android.intent.action.WALLPAPER_CHANGED"; ACTION_CONFIGURATION_CHANGED = "android.intent.action.CONFIGURATION_CHANGED"; ACTION_LOCALE_CHANGED = "android.intent.action.LOCALE_CHANGED"; ACTION_BATTERY_CHANGED = "android.intent.action.BATTERY_CHANGED"; ACTION_BATTERY_LOW = "android.intent.action.BATTERY_LOW"; ACTION_BATTERY_OKAY = "android.intent.action.BATTERY_OKAY"; ACTION_POWER_CONNECTED = "android.intent.action.ACTION_POWER_CONNECTED"; ACTION_POWER_DISCONNECTED = "android.intent.action.ACTION_POWER_DISCONNECTED"; ACTION_SHUTDOWN = "android.intent.action.ACTION_SHUTDOWN"; ACTION_DEVICE_STORAGE_LOW = "android.intent.action.DEVICE_STORAGE_LOW"; ACTION_DEVICE_STORAGE_OK = "android.intent.action.DEVICE_STORAGE_OK"; ACTION_MANAGE_PACKAGE_STORAGE = "android.intent.action.MANAGE_PACKAGE_STORAGE"; ACTION_UMS_CONNECTED = "android.intent.action.UMS_CONNECTED"; ACTION_UMS_DISCONNECTED = "android.intent.action.UMS_DISCONNECTED"; ACTION_MEDIA_REMOVED = "android.intent.action.MEDIA_REMOVED"; ACTION_MEDIA_UNMOUNTED = "android.intent.action.MEDIA_UNMOUNTED"; ACTION_MEDIA_CHECKING = "android.intent.action.MEDIA_CHECKING"; ACTION_MEDIA_NOFS = "android.intent.action.MEDIA_NOFS"; ACTION_MEDIA_MOUNTED = "android.intent.action.MEDIA_MOUNTED"; ACTION_MEDIA_SHARED = "android.intent.action.MEDIA_SHARED"; ACTION_MEDIA_BAD_REMOVAL = "android.intent.action.MEDIA_BAD_REMOVAL"; ACTION_MEDIA_UNMOUNTABLE = "android.intent.action.MEDIA_UNMOUNTABLE"; ACTION_MEDIA_EJECT = "android.intent.action.MEDIA_EJECT"; ACTION_MEDIA_SCANNER_STARTED = "android.intent.action.MEDIA_SCANNER_STARTED"; ACTION_MEDIA_SCANNER_FINISHED = "android.intent.action.MEDIA_SCANNER_FINISHED"; ACTION_MEDIA_SCANNER_SCAN_FILE = "android.intent.action.MEDIA_SCANNER_SCAN_FILE"; ACTION_MEDIA_BUTTON = "android.intent.action.MEDIA_BUTTON"; ACTION_CAMERA_BUTTON = "android.intent.action.CAMERA_BUTTON"; ACTION_GTALK_SERVICE_CONNECTED = "android.intent.action.GTALK_CONNECTED"; ACTION_GTALK_SERVICE_DISCONNECTED = "android.intent.action.GTALK_DISCONNECTED"; ACTION_INPUT_METHOD_CHANGED = "android.intent.action.INPUT_METHOD_CHANGED"; ACTION_AIRPLANE_MODE_CHANGED = "android.intent.action.AIRPLANE_MODE"; ACTION_PROVIDER_CHANGED = "android.intent.action.PROVIDER_CHANGED"; ACTION_HEADSET_PLUG = "android.intent.action.HEADSET_PLUG"; ACTION_NEW_OUTGOING_CALL = "android.intent.action.NEW_OUTGOING_CALL"; ACTION_REBOOT = "android.intent.action.REBOOT"; ACTION_DOCK_EVENT = "android.intent.action.DOCK_EVENT"; |
Data |
|
Type |
|
Component |
new ComponentName(Package_Name, Class_Name) |
Extras |
Intent result = new Intent(); result.putExtra(LoginActivity.TEXT_RESULT, "finish"); String result = data.getStringExtra(TEXT_RESULT); |
- 인텐트 선언
-
- 명시적 선언 : new Intent(Context packageContext, Class cls)
- 묵시적 선언 : new Intent(String action, Uri uri)
- 인텐트 핸들러
Activity |
|
Service |
|
BroadcastReceiver |
|
- IntentFilter
-
- AndroidManifest.xml
Intent intent = new Intent(Constants.INTENT_ACTION_VIEW_LIST); startActivity(intent); <activity android:name="ReviewList"> 또는 <service> 또는 <receiver> <intent-filter> <category android:name="android.intent.category.DEFAULT" /> <action android:name="com.msi.manning.restaurant.VIEW_LIST" /> <data android:scheme="weather" android:host="com.msi.manning" /> </intent-filter> </activity>
Intent 활용 사례
연락처 Intent
- 연락처 조회
intent = new Intent(Intent.ACTION_VIEW, Uri.parse("content://contacts/people/" + String.valueOf(contact.getId()))); startActivity(intent);
- 연락처 등록
intent = new Intent(Intent.ACTION_INSERT, Uri.parse("content://contacts/people")); startActivity(intent);
- 연락처 수정
intent = new Intent(Intent.ACTION_EDIT, Uri.parse("content://contacts/people/" + String.valueOf(contact.getId()))); startActivity(intent);
- 연락처 삭제
intent = new Intent(Intent.ACTION_DELETE, Uri.parse("content://contacts/people/" + String.valueOf(contact.getId()))); startActivity(intent);
전화 Intent
- 권한 설정 (AndroidManifest.xml)
전화 걸기 : CALL_PHONE = "android.permission.CALL_PHONE" 긴급 통화 : CALL_PRIVILEGED = "android.permission.CALL_PRIVILEGED" 폰 상태 읽기 : READ_PHONE_STATE = "android.permission.READ_PHONE_STATE" 폰 상태 수정 : MODIFY_PHONE_STATE = "android.permission.MODIFY_PHONE_STATE" 브로드케스팅 수신 : PROCESS_OUTGOING_CALLS = "android.permission.PROCESS_OUTGOING_CALLS" 전화 걸기 이전 : ACTION_NEW_OUTGOING_CALL = "android.intent.action.NEW_OUTGOING_CALL"
- 전화걸기 화면
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + TelNumber)); startActivity(intent);
- 전화걸기
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + TelNumber)); startActivity(intent);
SMS Intent
- 권한 설정 (AndroidManifest.xml)
수신 모니터링 : RECEIVE_SMS = "android.permission.RECEIVE_SMS" 읽기 가능 : READ_SMS = "android.permission.READ_SMS" 발송 가능 : SEND_SMS = "android.permission.SEND_SMS" SMS Provider로 전송 : WRITE_SMS = "android.permission.WRITE_SMS" : BROADCAST_SMS = "android.permission.BROADCAST_SMS"
- SMS 발송 화면
Intent intent = new Intent(Intent.ACTION_VIEW); intent.putExtra("sms_body", "The SMS text"); intent.setType("vnd.android-dir/mms-sms"); startActivity(intent);
- SMS 보내기
Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto://" + contact.getHandphone())); intent.putExtra("sms_body", "The SMS text"); intent.setType("vnd.android-dir/mms-sms"); startActivity(intent);
이메일 Intent
- 이메일 발송 화면
Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:" + contact.getEmail())); startActivity(intent);
브라우저 Intent
- Browser에서 URL 호출하기
new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com/")); startActivity(intent);
- 브라우저에서 검색
Intent intent = new Intent(Intent.ACT ION_WEB_SEARCH); intent.putExtra(SearchManager.QUERY, "검색어"); startActivity(intent);
지도 Intent
- 지도 보기
Uri uri = Uri.parse ("geo: 38.00, -35.03"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent);
안드로이드 마켓 Intent
- 안드로이드 마켓에서 Apps 검색
Uri uri = Uri.parse("market://search?q=pname:전제_패키지_명"); //--- 예) market://search?q=pname:com.jopenbusiness.android.smartsearch Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent);
- 안드로이드 마켓의 App 상세 화면
Uri uri = Uri.parse("market://details?id=전제_패키지_명"); //--- 예) market://details?id=com.jopenbusiness.android.smartsearch Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent);
갤럭시S의 Intent
- 패키지명과 클래스명으로 App 호출
intent = new Intent(Intent.ACTION_MAIN); intent.setComponent(new ComponentName("패키지명", "전체_클래스명")); startActivity(intent);
- 전화, SMS
-
- 전화번호부 : com.android.contacts, com.sec.android.app.contacts.PhoneBookTopMenuActivity
- 전화 : com.sec.android.app.dialertab, com.sec.android.app.dialertab.DialerTabActivity
- 최근기록 : com.sec.android.app.dialertab, com.sec.android.app.dialertab.DialerTabDialerActivity
- 메시지 : com.sec.mms, com.sec.mms.Mms
- 이메일 : com.android.email, com.android.email.activity.Welcome
- 일정 : com.android.calendar, com.android.calendar.LaunchActivity
- 인터넷 : com.android.browser, com.android.browser.BrowserActivity
- Google의 Android용 앱
-
- 검색 : com.google.android.googlequicksearchbox, com.google.android.googlequicksearchbox.SearchActivity
- 음성 검색 : com.google.android.voicesearch, com.google.android.voicesearch.RecognitionActivity
- Gmail : com.google.android.gm, com.google.android.gm.ConversationListActivityGmail
- 지도 : com.google.android.apps.maps, com.google.android.maps.MapsActivity
- 위치찾기 : com.google.android.apps.maps, com.google.android.maps.LatitudeActivity
- YouTube : com.google.android.youtube, com.google.android.youtube.HomeActivity
- 토크 : com.google.android.talk, com.google.android.talk.SigningInActivity
- Goggles : com.google.android.apps.unveil, com.google.android.apps.unveil.CaptureActivity
- Google 번역 : com.google.android.apps.translate, com.google.android.apps.translate.HomeActivity
- Reader : com.google.android.apps.reader, com.google.android.apps.unveil.CaptureActivity
- Voice : com.google.android.apps.googlevoice, com.google.android.apps.googlevoice.SplashActivity
- Google 별지도 : com.google.android.stardroid, com.google.android.stardroid.activities.SplashScreenActivity
- 카메라 : com.sec.android.app.camera, com.sec.android.app.camera.Camera
- TV : com.sec.android.app.dmb, com.sec.android.app.dmb.activity.DMBFullScreenView
- Android 관리
-
- 환경 설정 : com.android.settings, com.android.settings.Settings
- 작업 관리자 : com.sec.android.app.controlpanel, com.sec.android.app.controlpanel.activity.JobManagerActivity
- 마켓 : com.android.vending, com.android.vending.AssetBrowserActivity
기타 사례
- Intent 사례
Intent intent = null; new Intent(ActivityExample.this, SimpleMathService.class); intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(new File("/sdcard/~.png")), "image/png"); intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("audio/*"); // image/*, video/*, vnd.android.cursor.item/phone_v2
- ACTION
-
- VIEW, INSERT, EDIT, DELETE
- MAIN, PICK, GET_CONTENT
참고 문헌
'개발 > 안드로이드' 카테고리의 다른 글
ListView, GridView 등... 스크롤링 상태 체크하기. (0) | 2012.02.06 |
---|---|
Cursor query (Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) (0) | 2012.02.06 |
안드로이드 타이틀바 내맘대로 설정해보자 Activity.requestWindowFeature(int featureid) (0) | 2012.02.06 |
비트맵 이미지(Bitmap image) 관리하기 (0) | 2012.02.06 |
intent 로 데이터를 넘겨줄때 객체단위로 넘기는 방법 implements Parcelable (0) | 2012.02.06 |
댓글