ADT 업데이트
일단 이클립스의 Help->Update 로 들어가서 아래 주소를 입력한다.

 https://dl-ssl.google.com/android/eclipse/

그런데 설치를 진행하면 아래와같은 오류로 더이상 안되는 경우가 있다.
우분투에서 apt-get 으로 이클립스를 설치했을 경우 기본적인 플러그인만 설치되기때문에 이런 현상이 많이 발생한다.

Cannot complete the install because one or more required items could not be found.

  Software being installed: Android Development Tools 0.9.6.v201002051504-24846 (com.android.ide.eclipse.adt.feature.group 0.9.6.v201002051504-24846)

  Missing requirement: Android Development Tools 0.9.6.v201002051504-24846 (com.android.ide.eclipse.adt.feature.group 0.9.6.v201002051504-24846) requires 'org.eclipse.wst.sse.ui 0.0.0' but it could not be found

해결하기 위해서는 필요한 플러그인을 먼저 설치해주면 된다.
위의 오류에서는 wst 가 필요하다고 하는데 이는 웹관련 툴을 의미하는것으로 ADT 에서 웹관련 툴을 사용하는것으로 판단된다.
WST를 설치하기 위해서는 이클립스 업데이트 사이트에 아래 주소를 입력하자.
http://download.eclipse.org/releases/galileo
"Eclipse Web Developer Tools" 를 찾아서 설치하자.
설치가 다 끝나면 이제다시 ADT 를 설치하면 제대로 설치 될 것이다.

by cranix 2010.03.21 16:22
필요한 라이브러리 설치하기
컴파일 하기위해서 필요한 라이브러리를 한꺼번에 설치하자.

# apt-get install git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev
# apt-get install valgrind



자바 1.5 설치하기
안드로이드는 아직 자바 1.6을 지원하지 않는다. 그래서 1.5 를 설치해야 하는데 문제는 우분투 9.10 에서는 자바 1.5 를 apt-get 으로 설치할수 없다는 것이다.
그래서 아래와 같은 방법이 필요하다.

시스템>관리>소프트웨어 소스를 선택하면 [소프트웨어 소스] 창이 뜬다.
여기서 기타 소프트웨어 탭에서 아래 와 같이 추가해 주자.

deb http://kr.archive.ubuntu.com/ubuntu/ jaunty multiverse
deb http://kr.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse

창을 닫으면 소프트웨어를 다시 읽는것을 볼 수 있다.
내 컴퓨터 같은경우는 다시 읽다가 거의 다된 시점에서 계속 멈추어 있길래 취소를 눌러주었다.
뭔가 오류가 났지만 상관없이 진행되었다.
다되었으면 apt-get 으로 설치해 보도록 하자.

 # apt-get install sun-java5-jdk

 이제 설치되었다면 버젼을 확인해 보자.

 # java -version

 만약 1.5 가 아니라면 아래 명령으로 자바 리스트를 확인한후 업데이트 시켜주자.

# update-java-alternatives -l

java-1.5.0-sun 53 /usr/lib/jvm/java-1.5.0-sun

java-6-sun 63 /usr/lib/jvm/java-6-sun

# update-java-alternatives -s java-1.5.0-sun

 만약 자바 버젼을 바꾸는 도중 아래와 같은 메시지를 볼 수도 있을것이다.

update-alternatives: error: no alternatives for firefox-javaplugin.so.

update-alternatives: error: no alternatives for iceape-javaplugin.so.

update-alternatives: error: no alternatives for iceweasel-javaplugin.so.

update-alternatives: error: no alternatives for jhat.

update-alternatives: error: no alternatives for jrunscript.

update-alternatives: error: no alternatives for midbrowser-javaplugin.so.

update-alternatives: error: no alternatives for mozilla-javaplugin.so.

update-alternatives: error: no alternatives for schemagen.

update-alternatives: error: no alternatives for wsgen.

update-alternatives: error: no alternatives for wsimport.

update-alternatives: error: no alternatives for xjc.

update-alternatives: error: no alternatives for xulrunner-1.9-javaplugin.so.

update-alternatives: error: no alternatives for xulrunner-javaplugin.so.

update-alternatives: error: no alternatives for firefox-javaplugin.so.

update-alternatives: error: no alternatives for iceape-javaplugin.so.

update-alternatives: error: no alternatives for iceweasel-javaplugin.so.

update-alternatives: error: no alternatives for midbrowser-javaplugin.so.

update-alternatives: error: no alternatives for mozilla-javaplugin.so.

update-alternatives: error: no alternatives for xulrunner-1.9-javaplugin.so.

update-alternatives: error: no alternatives for xulrunner-javaplugin.so.

이것은 안드로이드 소스 컴파일과는 관계없지만 다른 어플을 실행하는데 문제가 될 수도 있기 때문에 아래와 같이 sun-java5-plugin 과 sun-java6-plugin 을 설치해 주자.

 # apt-get install sun-java5-plugin sun-java6-plugin

 

컴파일 하기
이제 컴파일할 환경은 다 갖추어 졌다.
다운받은 안드로이드 소스에는 크로스 컴파일 환경까지 갖추어져 있다.
(안드로이드 소스 다운받는법은 android 소스 다운로드 받기 를 참조하자)
그래서 컴파일을 하기위해서는 "build/envsetup.sh" 파일을 환경등록 해주어야 한다.
다운받은 소스의 루트 디렉토리에서 아래와같이 실행해서 환경등록 해주도록 하자.

 # source build/envsetup.sh

다되었다면 이제 make 를 하면 된다.

 # make

안드로이드 소스는 최초 컴파일시 시간이 무척오래 걸린다.
사실 -j 옵션으로 스레드를 돌려주면 시간을 약간 줄일 수 있다.
그런데 이 옵션은 최초 컴파일시는 왠만해서 사용하지 않는것이 좋다.
왜냐하면 먼저 컴파일 된 것을 참조하는 구문이 있을수도 있는데 그런곳에서 오류가 나서 컴파일이 멈추어 버리는 현상이 나오기 때문이다.
일단 처음에는 느리더라고 그냥 make 를 쓰자.

by cranix 2010.03.21 13:56

curl 로 repo 스크립트 받기

안드로이드는 수많은 개발자가 참여하는 오픈소스 시스템이다.

이러한 시스템을 관리해주는 유틸은 git 를 사용하는데 그러다 보니 전체 소스가 한꺼번에 관리되지 않는다.

그래서 웹상에 소스를 한꺼번에 다운로드 받을수 있는 스크립트를 작성해 놓고 curl 로 다운받아가게 한 것이다.

# apt-get install curl

# curl http://android.git.kernel.org/repo >repo

# chmod 755 repo

이제 repo 라는 스크립트가 생겼을 것이다.

편하게 하기위해서는 repo 가 있는 디렉토리를 PATH 로 잡아놓으면 된다.

 

 

repo 를 사용해서 소스받기

repo 는 결국 git 를 사용하기 때문에 git 를 먼저 설치해야 한다.

 # apt-get install git-core

git-core 가 없다면 repo 를 실행했을때 "No such file or directory" 오류가 떨어질 것이다.

 

repo 를 이용해서 다운받으려면 init 과 sync 옵션을 사용하면 된다.

# mkdir android_src

# cd android_src

# repo init -u git://android.git.kernel.org/platform/manifest.git

# repo sync

repo 를 실행하기 전에 먼저 소스가 저장될 디렉토리를 만들고 그안에서 init 과 sync 작업을 하도록 하자.

repo init 옵션은 마지막에 -b (branch) 옵션으로 원하는 버전의 소스를 받을수 있다. 위 처럼 아무것도 안쓴다면 최신버전을 다운받게 된다.

그리고 init 을 실행 할 때 이름, 메일주소 등을 물어보는데 적당히 적어주면 된다.

init 작업은 실제로 소스를 다운받지 않기 때문에 빠른 시간안에 끝난다. sync 에서 비로소 소스를 다운받기 때문에 상당히 시간이 걸린다. 인터넷이 빨라도 최소한 한시간은 잡아야 한다.

 

by cranix 2010.03.18 10:35
1. 커널 다운로드

# git clone git://android.git.kernel.org/kernel/common.git kernel_goldfish

# cd kernel_goldfish

# git checkout --track -b android-goldfish-2.6.29 origin/android-goldfish-2.6.29

# git branch

 
2. 컴파일 하기

 # make goldfish_defconfig ARCH=arm

# vi Makefile 아래 수정

  193   ARCH := arm

  194   CROSS_COMPILE  := [안드로이 sdk 경로]/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-

# make zImage

 

'알짜정보 > Android' 카테고리의 다른 글

안드로이드 소스 컴파일 하기  (48) 2010.03.21
android 소스 다운로드 받기  (40) 2010.03.18
goldfish 커널 다운로드 및 컴파일 하기  (818) 2010.03.16
android 커널부팅부터 액티비티까지  (21) 2010.03.12
AlertDialog 와 Toast  (45) 2010.03.01
SharedPreferences  (1017) 2010.03.01
by cranix 2010.03.16 20:04
안드로이드는 커널 부팅후 /init 을 실행해 준다.
그 후 부터 home activity 가 뜰때까지의 과정을 분석해 보았다.

kernel boot
init.c:main() - init process 실행
app_main.cpp:main() - zygote service 실행
AndroidRuntime.cpp:start() - java VM 실행
ZygoteInit.java:main()
SystemServer.java:main()
system_init.cpp:system_init()
SystemServer.java:init2()
ServerThread.run()
ActivityManagerService.java:startRunning()
systemReady()
resumeTopActivityLocked()
startHomeActivityLocked()
startActivityLocked()

- system_init.cpp 의 main() 에서는 SurfaceFlinger, AudioFlinger, MediaPlayerService, CameraService, AudioPolicyService 등 C++ 과 연동되어진 서비스들이 실행된다.

- SystemServer.java:ServerThread.run() 에서는 안드로이드 프레임웍 자바단에서 쓰이는 모든 서비스가 실행 및 등록 된다.

'알짜정보 > Android' 카테고리의 다른 글

android 소스 다운로드 받기  (40) 2010.03.18
goldfish 커널 다운로드 및 컴파일 하기  (818) 2010.03.16
android 커널부팅부터 액티비티까지  (21) 2010.03.12
AlertDialog 와 Toast  (45) 2010.03.01
SharedPreferences  (1017) 2010.03.01
Activity 간의 통신  (121) 2010.02.25
by cranix 2010.03.12 11:39

이번 포스트에서는 안드로이드에서 쉽게 메시지를 보여 줄 수 있는 두 가지 클래스에 대해서 알아 도록 하겠다.

프로그램은 아래와 같다.

이 프로그램은 AlertDialog 와 Toast 메시지를 띄우는 프로그램이다.

 

먼저 레이아웃 소스를 보자.

 

- main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <Button android:layout_height="wrap_content" android:id="@+id/dialogBtn"
        android:layout_gravity="center" android:layout_width="200px"
        android:text="AlertDialog"></Button>
    <Button android:layout_height="wrap_content"
        android:layout_gravity="center" android:layout_width="200px"
        android:id="@+id/toastBtn" android:text="Toast"></Button>

</LinearLayout>

 

 

다음은 Activity 소스를 보자.

 

- MainActivity.java

package net.cranix.android.uitest;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button dialogBtn = (Button)findViewById(R.id.dialogBtn);
        dialogBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this);
                alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Log.i(getResources().getString(R.string.app_name), "OK");
                    }
                });
                alertDialog.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Log.i(getResources().getString(R.string.app_name), "CANCEL");
                    }
                });
                alertDialog.setTitle("alert");
                alertDialog.setMessage("testMessage");
                alertDialog.show();

            }           
        });
        Button toastBtn = (Button)findViewById(R.id.toastBtn);
        toastBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "toast!", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

 

 

AlertDialog 는 생성자가 protected 로 되어있다. 그래서 해당 클래스를 쓰려면 상속받아서 만드는 수 밖에 없는데 안드로이드에서는 기본적으로 AlertDialog.Builder 라는 클래스를 제공해서 쉽게 생성 할 수 있도록 도와주고 있다.

위에서 보는것과 같이 Builder 클래스를 이용하면 ok,cancel 과 같은 기존의 alert 상자에서 볼 수 있었던 버튼들을 직접 Button 을생성해서 위치 시키지 않아도 쉽게 추가 할 수있는 setPositiveButton  이나 setNegativeButton 을 제공한다.

또한 setTitle 과 setMessage 메소드를 제공해서 다른 자잘한 셋팅에 신경쓸 필요 없이 자동으로 만들어 준다.

 

Toast 메시지는 특정 메시지를 일정 시간동안 출력하고 알아서 사라지게 된다.

위와 같은 형태로 출력이 되며 AlertDialog 처럼 사용자와 상호작용 할 수 있도록 지원하지 않는다.

또한 Toast 메시지는 뜨기는 하지만 포커스가 해당 메시지로 이동하지는 않는다.

이것은 간단한 정보를 출력 할 때 많이 쓰이고 디버그 용으로도 많이 쓰인다.

출력되는 정보가 간단한 만큼 가장 간단하게 사용할 수 있다.

Toast.makeToast 라는 static 함수로서 생성되며 위의 예제에서 처럼 .show() 함수까지 함께 써서 한줄로 사용하는것이 일반적이다.

'알짜정보 > Android' 카테고리의 다른 글

android 소스 다운로드 받기  (40) 2010.03.18
goldfish 커널 다운로드 및 컴파일 하기  (818) 2010.03.16
android 커널부팅부터 액티비티까지  (21) 2010.03.12
AlertDialog 와 Toast  (45) 2010.03.01
SharedPreferences  (1017) 2010.03.01
Activity 간의 통신  (121) 2010.02.25
by cranix 2010.03.01 04:11

오늘은 위와 같은 어플을 만들 것이다.

그냥 봐서는 어플의 기능을 추측할수 없는데 이것은 껏다가 켜도 화면의 내용이 초기화 되지 않고 유지되는 기능을 가지고 있다.

 

그럼 만들기를 시작해 보도록 하자.

먼저 위와 같은 형태의 레이아웃 을 작성하자.

 

- main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

<EditText
    android:layout_height="wrap_content"
    android:id="@+id/nameEditText"
    android:layout_width="fill_parent"
    android:hint="name"></EditText>
    <EditText
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:hint="email"
        android:id="@+id/emailEditText"></EditText>
    <EditText
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:hint="phone"
        android:id="@+id/phoneEditText"></EditText>

</LinearLayout>

 

다음은  Activity 파일을 작성하자

 

- MainActivity.java

package net.cranix.android.preftest;

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.widget.EditText;

public class MainActivity extends Activity {
    private SharedPreferences pref = null;
    private EditText nameEditText = null;
    private EditText emailEditText = null;
    private EditText phoneEditText = null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        pref = getSharedPreferences("net.cranix.android.preftest",Activity.MODE_PRIVATE);
        nameEditText = (EditText) findViewById(R.id.nameEditText);
        emailEditText = (EditText) findViewById(R.id.emailEditText);
        phoneEditText = (EditText) findViewById(R.id.phoneEditText);
        nameEditText.setText(pref.getString("name", ""));
        emailEditText.setText(pref.getString("email", ""));
        phoneEditText.setText(pref.getString("phone", ""));

    }
    @Override
    protected void onStop() {
        super.onStop();
        SharedPreferences.Editor editor = pref.edit();
        editor.putString("name", nameEditText.getText().toString());
        editor.putString("email", emailEditText.getText().toString());
        editor.putString("phone", phoneEditText.getText().toString());
        editor.commit();

    }
}

이렇게 현재 화면 정보 같은 작은 정보들을 저장하기 위해서 안드로이드는 SharedPreferences 라는 클래스를 제공한다.

이 클래스는 위 소스 에서와 같이 getSharedPreferences 메소드로 객체를 생성 할 수 있다.

이렇게 생성된 SharedPreferences 객체는 getString 과 같은 getXXX 형태의 메소드로 값을 얻어 올 수 있다.

위 소스에서 Activity 가 종료되는 onStop 메소드 에서는 SharedPreferences 에다가 현재 환경을 저장하고 있다.

SharedPreferneces 는 pref.edit() 로 Editor 객체를 얻은후 putString 으로 값을 변경한다. 다 변경했으면 editor.commit() 함수로 변경된 내용을 저장한다.

 

위에서도 언급했듯이 SharedPreferences 는 임시변수나 현재 UI 정보같은 작은 크기의 정보를 저장하기 적합하다. 조금 더 큰 데이터는 직접 파일에 쓰거나 SQL 을 사용하여 DB 에 저장하도록 하여야 한다.

 

그렇다면 이 데이터는 어디에 저장되는 것일까?

DDMS 나 adb 툴을 이용하여 확인해 보면 아래와 같은 xml 파일이 어플리케이션 디렉토리에 생긴 것을 볼 수 있다.

# pwd
pwd
/data/data/net.cranix.android.preftest
# cd shared_prefs
cd shared_prefs
# ls
ls
net.cranix.android.preftest.xml
# cat net.cranix.android.preftest.xml
cat net.cranix.android.preftest.xml
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="email">2</string>
<string name="phone">3</string>
<string name="name">1</string>
</map>
#

'알짜정보 > Android' 카테고리의 다른 글

android 소스 다운로드 받기  (40) 2010.03.18
goldfish 커널 다운로드 및 컴파일 하기  (818) 2010.03.16
android 커널부팅부터 액티비티까지  (21) 2010.03.12
AlertDialog 와 Toast  (45) 2010.03.01
SharedPreferences  (1017) 2010.03.01
Activity 간의 통신  (121) 2010.02.25
by cranix 2010.03.01 03:31

대부분의 안드로이드 어플리케이션은 두개 이상의 Activity로 이루어진다. 각 Activity 들은 서로 Intent 를 통해서 통신을 하게된다.

이번 포스트에서는 Activity 간에 통신하는 방법을 예제와 함께 알아보자.

 

먼저 가장 메인 화면 레이아웃은 아래와 같이 구성한다.

 

main.xml 파일은 아래와 같다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView
        android:layout_height="wrap_content"
        android:id="@+id/textView"
        android:textSize="10pt" android:text="display"
        android:layout_width="wrap_content"
        android:layout_gravity="center"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:id="@+id/openBtn"
        android:text="open"/>
</LinearLayout>

 

새로운 Activity 를 위해서 아래와 같은 레이아웃을 하나 더 추가한다.

 

파일명은 form.xml 로 하고 내용은 아래와 같다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    android:orientation="vertical">
    <EditText
        android:layout_height="wrap_content"
        android:id="@+id/editText"
        android:layout_width="fill_parent"
        android:hint="enter text"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="OK" android:id="@+id/okBtn"/>
</LinearLayout>

 

위 레이아웃을 보면 어느 정도 눈치 채겠지만 프로그램에 대해서 설명하자면 두 번째 레이아웃에 텍스트를 입력하고

OK 버튼을 누르면 첫 번째 레이아웃에 표시되는 것이다.

먼저 main.xml 과 연결되어 있는 MainActivity 를 만들도록 하자.

package net.cranix.android.activitytest;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button openBtn = (Button)findViewById(R.id.openBtn);
        openBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(MainActivity.this,FormActivity.class);
                startActivityForResult(i, 0);

            }
        });
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
            if (requestCode == 0) {
                TextView textView = (TextView)findViewById(R.id.textView);
                textView.setText(data.getExtras().getString("text"));

            }
        }
    }
}

위 소스에서 굵게 표시한 부분이 중요한 부분이다.

먼저 첫번째 부분은 Intent 를 이용하여 다른 Activity 를 호출하는 코드이다. 여기서 Intent는 안드로이드내 의 모든 Activity 간의 통신을 담당하는 구조체다. Intent 는 위와 같이 new Intent([호출한Activity],[호출당한Activity]) 형태로 만든다.

startActivityForResult 함수는 인텐트와 함께 resultCode 를 다른 Activity 로 보내는 역할을 한다 여기서 resultCode 가 어떤 역할을 하는지는 계속 읽다보면 이해 할 수 있을것이다.

 

 

다음으로 form.xml 과 연결될 Activity 를 만들어 보자.

 

아래와 같이 AndroidManifest.xml 파일을 열어 Application 탭의 Add 버튼을 누른다.

 

다음에 나오는 대화상자에서 Activity 를 클릭하면 아래와 같이 오른쪽에 Activity 설정 대화상자가 나온다.

거기서 아래와 같이 오른쪽에 있는 name 을 클릭하자

 

그럼 아래와 같이 클래스 추가하는 대화상자가 나오는데 Name 에다가 FormActivity 을 넣고 클래스를 생성한다.

 

 

소스는 아래와 같다.

package net.cranix.android.activitytest;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class FormActivity extends Activity {
    private EditText editText;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.form);

        editText = (EditText)findViewById(R.id.editText);
        Button okBtn = (Button)findViewById(R.id.okBtn);
        okBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = getIntent();
                i.putExtra("text", editText.getText().toString());
                setResult(RESULT_OK, i);
                finish();

            }
        });
    }
}

 

이번 소스에도 중요한 부분은 볼드체로 되어있다.

현재 Activity 가 떠 있다는 소리는 어떤 Intent 에 의해서 호출되어진 것을 의미한다.

getIntent() 함수는 호출한 Intent 를 돌려주는 함수이다.

Intent 에다가는 데이터를 저장할 수 있는 이렇게 데이터가 저장된 intent 를 다른 Activity 로 보냄 으로서 통신이 이루어 지는 것이다.

데이터를 저장하는 방법은 위와 같이 intent 의 putExtra([key],[value]) 함수를 사용하면 된다.

setResult 함수는 호출한 Activity 에 전달해줄 intent 를 저장하는 함수로서 resultCode 와 같이 사용한다.

마지막으로 finish() 함수가 호출되면 setResult 함수에 의해 저장되어있던 resultCode 와 intent 가 이전의 Activity 에 전달되면서 현재의 Activity 는 닫히게 된다.

이러한 방식은 html 의 form 전달 방식을 보는듯 하다.

 

그럼 완성된 어플리케이션 화면을 보도록 하자.

 

 

사실 이 어플리케이션에서 Intent 를 쓰지 않고도 같은 기능을 하도록 만들 수 있다. 그럼에도 구지 Intent 를 쓰는 이유는 다른 어플들과의 통신을 쉽게 하기 위해서 이다.

안드로이드 내의 모든 어플들은 Activity 단위로 되어있으며 이 모든Activity 는 AndroidManifest 파일에서 허용만 해주면 다른 Activity 가 끌어다 쓸 수 있게 되어있다.

이러다 보니 수많은 사람들이 만든 Activity 들간의 통신방법이 존재 할 수 있기 때문에 이러한 통신 방법을 통일할 필요가 있었던 것이다.

 

 

'알짜정보 > Android' 카테고리의 다른 글

android 소스 다운로드 받기  (40) 2010.03.18
goldfish 커널 다운로드 및 컴파일 하기  (818) 2010.03.16
android 커널부팅부터 액티비티까지  (21) 2010.03.12
AlertDialog 와 Toast  (45) 2010.03.01
SharedPreferences  (1017) 2010.03.01
Activity 간의 통신  (121) 2010.02.25
by cranix 2010.02.25 23:47
| 1 2 3 4 |