본문 바로가기
Android

[Android] Intent (인텐트)

by 유혁. 2017. 6. 27.

 

Intent란?

 

Intent(인텐트)를 설명하기 전에 Activity에 대해 먼저 설명하겠습니다.

 

안드로이드 어플리케이션은 Activity라는 컴포넌트 하나 이상 결합되어 생성됩니다.

 

Activity는 어플리케이션 기능을 갖는 단일의 독립 실행형 모듈입니다.

 

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}

프로젝트를 최초 생성하면 Activity 클래스를 상속받습니다.

 

Activity는 안드로이드 Activity 클래스의 서브 클래스로 생성되어야 하며,

 

다른 액티비티와 완전히 독립적으로 구현하여야합니다.

 

액티비티는 다른 액티비티의 메서드를 직접 호출 할 수 없으면 데이터도 직접 엑세스 할 수 없습니다.

 

대신에 인텐트를 사용해 Activity를 공유할 수 있습니다.

 

 

-------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

인텐트란 하나의 액티비티가 다른 액티비티를 시작 시킬 수 있는 메커니즘 입니다.

 

 

 

1. 명시적 인텐트

QrImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainPage.this, MyQrRegister.class);
startActivity(intent);
}
});

클래스를 직접 생성, 액티비티를 상속받아 만든 Activity 클래스 명을

 

직접 호출하는 인텐트입니다.

 

 

명시적 인텐트 생성과정

 

 

목적 : activity_main  ->  intent_page 로 액티비티 이동

 

 

(1) MainAvtivity가 있는 패키지에 IntentPage라는 이름으로 java파일을 만듭니다.

 

 

 

OK Click!

 

 

 

(2) layout 패키지에도 intent_page.xml 파일을 만듭니다.

 

 

 

 

OK Click!

 

 

(3) MainActiviy를 작성한다.

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //메인 액티비티의 xml

Button btn = (Button)findViewById(R.id.btn); //버튼의 id값을 가져와 btn이라는 변수에 할당

btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(),IntentPage.class); //첫번째 인자 나의 클래스명, 두번째 인자 이동할 클래스명
startActivity(intent); //인텐트를 시작한다.
}
});
}
}

 

 

(4) activity_main.xml 을 작성한다.

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

<Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="IntentPage로 이동합니다."/>

</LinearLayout>

 

 

(5) IntentPage 클래스를 작성한다.

public class IntentPage extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.intent_page);
}
}

 

 

(6) intent_page.xml을 작성한다.

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

<TextView
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="intent_page"
android:textSize="50dp"/>

</LinearLayout>

빌드하면 프로그램 에러가 나온다.

명시적 인텐트는 보안상으로 메니페스트에 액티비티를 명시해주어야 한다.

 

 

 

(7) manifests 더블클릭

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.jy.a5th_study">

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

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

<activity android:name=".IntentPage"/> <!-- 이 부분을 추가해주어야 한다 -->

</application>

</manifest>

 

 

(8) 이제 AVD로 빌드

 

 

 

 

 

 

--------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

 

2. 암시적 인텐트

 

first.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:010-0000-0000"));
startActivity(intent);
}
});

 

생성한 클래스 액티비를 호출하는것이 아니라

생성하고자 하는 동작을 지정하여 페이지를 시작 시킨다.

 

ACTION_DIAL 이라는 Action 이 있는데 종류가 여러가지 있다.

ACTION_DIAL 은 전화를 건다는 행동이다.

 

 

(1) 위의 activity_main에 Button을 추가한다.

 

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

<Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="IntentPage로 이동합니다."/>

<!-- 이 부분을 추가한다 -->
<Button
android:id="@+id/btn1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="전화로 연결합니다."/>


</LinearLayout>

 

 

 

(2) MainActivity 에 버튼 이벤트를 추가해준다.

Button btn1 = (Button)findViewById(R.id.btn1);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:010-0000-0000"));
startActivity(intent);
}
});

Intent 전화걸기 요청

 

 

 

 

 

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

Button btn1 = (Button)findViewById(R.id.btn1);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String url = "http://yoo-hyeok.tistory.com/14";
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
}
});

Intent 웹 페이지 요청

 

 

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

 

 

 

 

 

 

 

(3) AVD로 빌드한다

 

 

 

 

 

 

 

 

이상으로 인텐트 명시적 암시적에 대해 알아보았습니다.

 

감사합니다.