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로 빌드한다
이상으로 인텐트 명시적 암시적에 대해 알아보았습니다.
감사합니다.
'Android' 카테고리의 다른 글
[Android] 안드로이드 <-> PHP <-> Mysql 연동 완벽정리 (1) - xampp 설치 (11) | 2017.06.28 |
---|---|
[Android] 안드로이드 액티비티간 데이터 전달 intent 활용 (1) | 2017.06.28 |
[Hybrid App] 웹앱, 네이티브앱, 하이브리드 앱 (0) | 2017.06.27 |
[Android] 안드로이드 레이아웃 둘러보기 (1) | 2017.06.27 |
[Android] 안드로이드 버튼을 이용한 간단한 어플리케이션 만들기 (6) | 2017.06.26 |