꿈꾸는 시스템 디자이너

명시적 인텐트를 통한 Activity 실행 본문

Development/Android

명시적 인텐트를 통한 Activity 실행

독행소년 2012. 4. 4. 17:57

1. 메니패스트파일에 호출할 Activity 등록

<?xml version="1.0" encoding="utf-8"?>
<!--
     android:theme="@style/Theme.Transparent"
     android:theme="@android:style/Theme.Light"
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.android.example"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="10" />

    <application
        android:icon="@drawable/icon"
        android:label="@string/app_name" >
        <activity
            android:label="@string/app_name"
            android:name=".ExplicitIntent" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".ForwardTarget" />
    </application>

</manifest>

 

메인 엑티비티는 .ExplicitIntent로 자동 등록되어 있는 것을 확인할 수 있다. 이는 메인 activity 클래스가 ExplicitIntent.class파일임을 의미한다.

호출할 엑티비티(ForwardTarget.class 파일)을 메니페시트 파일에 추가한다.

Java 코드 상에서 올바르게 Intent를 생성하여 호출한다고 하더라도, 호출되는 activity를 메니페시트에 추가하지 않으면 실행되지 않음에 주의한다.

2. 호출자 activity 구현

package com.android.example;

import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class ExplicitIntent extends Activity {
    @Override
 protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        // setTheme(android.R.style.Theme_Light);
        // setTheme(R.style.Theme_Transparent);
        setContentView(R.layout.main);

        Button goButton = (Button)findViewById(R.id.go);
        goButton.setOnClickListener(mGoListener);
    }

    private final OnClickListener mGoListener = new OnClickListener()
    {
            public void onClick(View v){
            Intent intent = new Intent();
            intent.setClass(ExplicitIntent.this, ForwardTarget.class);
            try {
             startActivity(intent);
            } catch(ActivityNotFoundException e ) {
             Log.w("ExplicitIntent", "ForwardTarget.class를 발견할 수 없습니다.");
            }
            // 스택에서 제거하고자 한다면 아래 finish() 메서드를 호출한다.
            finish();
        }
    };
}

 

버튼을 클릭하면 인텐트를 생성하여 피호출 activity에게 전달하는 구조이다.

 

3. 피호출 activity 구현

package com.android.example;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;

public class ForwardTarget extends Activity {
    @Override
 protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setTheme(android.R.style.Theme_Light);
        setContentView(R.layout.forward_target);
       
        Intent intent = getIntent();
        Toast.makeText(this, intent.toString(), 0).show();
    }
}

 

피호출 activity는 호출 activity에 인텐트 수신을 통해 실행되지만, 추가로 getIntent()를 통해 호출 activity가 보낸 인텐트을 받을 수도 있다.

Comments