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
- 연락처 조회
//--- RAW_CONTACT_ID로 연락처 조회 //--- 최신 스마트폰에서 정상 동작하지 않는 경우가 발생함 intent = new Intent(Intent.ACTION_VIEW, Uri.parse("content://contacts/people/" + String.valueOf(contact.getId()))); startActivity(intent); //--- CONTACT_ID로 연락처 조회 intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, contact.getContactId())); 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);
ex)
String sEmail = "";
sEmail = "mailto:"+ "a@b.com"; // 이메일 주소
Uri uri = Uri.parse(sEmail);
Intent it = new Intent(Intent.ACTION_SENDTO, uri);
it.putExtra(Intent.EXTRA_SUBJECT, "Contact us"); // 이메일 제목
startActivity(it);
sEmail = "mailto:"+ "a@b.com"; // 이메일 주소
Uri uri = Uri.parse(sEmail);
Intent it = new Intent(Intent.ACTION_SENDTO, uri);
it.putExtra(Intent.EXTRA_SUBJECT, "Contact us"); // 이메일 제목
startActivity(it);
브라우저 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);
- Header 정보 전달
Bundle extraHeaders = new Bundle(); extraHeaders.putString("user_name", "test"); extraHeaders.putString("user_pass", "test"); intent.putExtra(Browser.EXTRA_HEADERS, extraHeaders);
지도 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
참고 문헌
- 안드로이드 인텐트로 Activity기동 ?? - 점검해볼것, 2010.1
- Intent클래스의 유용하고 파워풀한 기능들의 TIP, 2010.5
- Android: Intent 활용 예시, 2010.11
출처 : http://www.jopenbusiness.com/mediawiki/index.php/Android_-_Intent
'안드로이드 개발 팁' 카테고리의 다른 글
안드로이드 디자인 사이트 (0) | 2012.01.17 |
---|---|
안드로이드 앱에서 시작시 간단하게 최신 버젼(version) 확인하고, 업데이트 요청 팝업 띄우기 (2) | 2011.12.29 |
android 마켓 링크 확인하기 (0) | 2011.12.09 |
android 화면 꺼짐을 막는방법 (0) | 2011.12.09 |
Android String 호출 방법 (0) | 2011.12.09 |