본문 바로가기

프로그래밍/Android

Intent 기본사항

   

Intent 는 안드로이드에서 메시지를 전달하는 방법 중 하나이다.

서로 다른 Activity 간에 메시지 혹은 이벤트를 전달할 수 있다.

(액티비티만을 해당하는 것이 아닌 백그라운드로 구동되는 서비스나 이벤트 수신을 기다리는 리시버들

에게도 메시지를 보낼 수 있다.)

   

관련함수

startActivity()

startActivityForResult()

startService()

sendBroadcast()

sendOrderedBroadcast()

sendStickyBroadcast()

   

Intent 객체는 이러한 메시지를 전달하기 위한 요소인데, 전달하는 형태에 따라 구성이 약간 달라진다.

   

   

   

1. 엑티비티의 실행 : 명시적호출 - 각 액티비티에 대해 해당 객체를 명확히 기술한다.

   

Intent 객체의 생성자 : public Intent(Context sender, Class<?> receiver)

   

Intent intent = new Intent( senderActivity.this, receiverActivity.class );

startActivity( intent );

   

액티비티 종료는

finish();

   

   

   

2. 액티비티에 데이터(메시지) 전달하고 결과받기

   

결과를 받는 액티비티 호출 : startActivityForResult( Intent intetnt, int reqID )

결과를 받는 이벤트 핸들러 : onActivityResult( int reqID, int result, Intent data )

호출한 인텐트 객체 얻기 : Intent getIntent( )

인텐트에 데이터 추가하기 : intent.putExtra( String keyName, data )

인텐트에 포함된 데이터 얻기 : intent.getStringExtra( keyName )

( getIntExtra, getBooleanExtra 등 데이터형에 따라 메쏘드 분류 )

   

[Sender]

Intent intent = new Intent( senderActivity.this, receiverActivity.class );

startActivityForResult( intent, 1 );

   

protected void onActivityResult( int reqID, int result, Intent data ) {

super.onActivityResult( reqID, result, data );

if( result == RESULT_OK ) {

if( reqID == 1 ) {

intent.getStringExtra( "key_name" );

}

}

}

   

[Receiver]

Intent intent = getIntent();

intent.putExtra("key_name", data );

serResult( RESULT_OK, intent );

finish();

   

   

   

3. 액티비티의 실행 - 묵시적 호출

위 두가지 형태는 모두 명시적인 형태를 가지고 있다. 하지만 호출할 녀석을 명확히 알지 못할 경우는

인텐트 객체내에 호출대상을 연결 시켜주는 식별자를 통한 연결을 하게된다.

이러한 호출을 묵시적 호출이라 하는데, 이 방식에는 여러 조건이 뒤따른다. 호출방식 이외는 명시적인

방법과 동일.

   

[Sender]

Intent intent = new Intent( Intent.ACTION , Uri.parse(" ") );

startActivity( intent );

   

Intent intent = new Intent( Intent.ACTION );

intent.setData( Uri.parse(" " ) );

startActivity( intent );

   

   

4. 묵시적 호출을 위한 인텐트 필터 - 인텐트를 수신하는 측에서 특정 인텐트만을 수신하고자

할때 설정하는 필터.

   

4-1. 액션, 카테고리

위에 언급한 각 모듈을 식별하기 위한 식별자를 액션, 카테고리 라고 한다.

   

인텐트 객체내에 이미 지정이 되어 있는 녀석들도 있고, 인텐트 필터를 통해 추가로 지정가능하다.

이미 정의된 액선은 http://developer.android.com/reference/android/content/Intent.html 참조.

   

카테고리는 일종의 속성으로 DEFAULT, LAUNCHER, ALTERNATIVE, SELECTED_ALTERNATIVE 등이 있다.

   

4-2. 데이터

액션과 카테고리로 해당 모듈을 식별하고, data를 전달하게 되는데, 이 역시 식별자에 알맞는

데이터가 정의되어 있다. 이 데이터는 URI 로 전달되는데, 리소스에 대해 고유한 식별자를 부여하는

것이다.

   

* UIR 구조

scheme://host:port/path

> scheme : http, content

> host : site, package

> path

   

4-3. 데이터 타입

데이터의 mime타입

   

   

이러한 내용은 이미 정의되어 있는 사항도 있고, 추가적으로 정의할 수도 있다.

여러 어플리케이션간에 상호 연동하기 위한 인터페이스 구축이라고 생각하면 쉬울 듯 싶다.

   

이를 인텐트 필터라 하는데 manifest.xml에 기술한다.

   

액션과 카테고리는 해당 명을 직접 지정해 주면 되고,

데이터의 경우 마임타입과 스키마를 지정하면 된다.

   

예를들어 MAIN 액션에 LAUNCHER 카테고리, 데이터가 video 형이고, 스키마는 http인 녀석만

허용한다는 필터는 아래와 같다.( MAIN, LAUNCHER의 의미는 이 액티비티가 task의 시작이 될 수있는

액티비티임을 나타냄...)

   

<activity ...>

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

<data android:mimeType = "video/*" android:scheme = "http"/>

</intent-filter>

</activity>

   

'프로그래밍 > Android' 카테고리의 다른 글

리시버를 통한 sms데이터 가져오기  (0) 2009.11.16
Broadcast/BroadcastReceiver  (0) 2009.11.11
AlarmManger 사용  (0) 2009.11.10
AsyncTask 이해하기  (0) 2009.11.09
테마설정하기  (0) 2009.11.09
타이틀바 없애기  (0) 2009.11.09
상태바 알림 처리  (0) 2009.11.09
Toast View 만들기  (0) 2009.11.09
AlertDialog 만들기  (0) 2009.11.06
Button 오브젝트  (0) 2009.11.06