반응형
■단방향 액티비티
한쪽 방향으로 데이터를 전달하는 방법이다.
- putExtra()를 이용하여 필요한 만큼의 데이터를 인텐트에 넣은 다음 startActivity()로 인텐트를 다른 엑티비티로 넘긴다.
- 인텐트를 받은 액티비티(SecondActivity)에서는 getStringExtra(), getIntentExtra().getBooleanExtra()등의 메소드로 넘어온 데이터에 접근할 수 있다.
■양방향 액티비티
양방향으로 데이터를 전달하는 방법이다.
메인 액티비티에서 세컨드 액티비티로 데이터를 넘긴 후에 세컨드 액티비티에서 메인 액티비티로 데이터를 줄 수 있다.
- 세컨드 액티비티에서 데이터를 돌려받으려면 액티비티를 호출할 때 startActivityForResult()메소드를 사용해야 한다.
- 세컨드 액티비티에서 finish()로 끝내기 전에 메인 액티비티에 돌려줄 인텐트를 생성하여 putExtra()로 데이터를 넣은 다음 setResult()로 돌려준다.
- onActivityResult() 메소드를 오버라이딩하고 오버라이딩된 메소드 안에서 getExtra() 로 돌려받은 데이터를 사용한다.
■액티비티 생명주기
액티비티의 생성부터 소멸까지의 주기를 말하며, 여러개의 액티비티로 작성되어 있다면
앞에 나오는 액티비티 하나만 활성화된 상태이고 나머지는 모두 비활성화된 상태가 된다.
■인텐트란?
안드로이드의 4개 컴포넌트가 서로 데이터를 주고받기 위한 메시지 객체이다.
명시적 인텐트와 암시적 인텐트로 구분할 수 있다.
■명시적 인텐트(explicit intent)
다른 액티비티의 이름을 명확히 지정할 때 사용하는 방법이다.
일반적으로 명시적 인텐트는 사용자가 새로운 액티비티를 직접 생성하고 호출할 때 사용된다.
Intent intent = new Intent(getApplicationContext(),SecondActivity.class);
startActivity(intent);
Intent 생성자의 두번째 파라미터 => 액티비티 클래스를 넘길 수 있음
SecondActivity.class 라고 정확히 지정하고 생성한 인텐트를 startActivity(intent)로 넘겨서 세컨드 액티비티를 실행
=>명확하게 액티비티 이름을 지정했기 때문에 명시적 인텐트라고 한다.
■암시적 인텐트(implicit intent)
약속된 액션을 지정하여 안드로이드에서 제공하는 기존 응용프로그램을 실행하는 것이다.
ex)전화번호를 인텐트로 넘긴 후에 전화걸기 응용 프로그램이 실행되는 것
암시적 인텐트 사용예시
- manifests- AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.androidpark.implicitintent">
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.ImplicitIntent">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
- MainActivity.java
package com.androidpark.implicitintent;
import android.app.SearchManager;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
Button btnCall, btnHome, btnGoogleMap, btnGoogleSearch, btnSendMsg, btnPicture;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnCall = (Button) findViewById(R.id.btnCall);
btnHome = (Button) findViewById(R.id.btnHome);
btnGoogleMap = (Button) findViewById(R.id.btnGoogleMap);
btnGoogleSearch = (Button) findViewById(R.id.btnGoogleSearch);
btnSendMsg = (Button) findViewById(R.id.btnSendMsg);
btnPicture = (Button) findViewById(R.id.btnPicture);
//전화를 걸기 위해 URI 문자열을 "tel:전화번호"형식으로 사용
btnCall.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Uri uri = Uri.parse("tel:01012345678");
Intent intent = new Intent(Intent.ACTION_DIAL,uri);
startActivity(intent);
}
});
btnHome.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Uri uri = Uri.parse("htttp://www.hanbit.com");
Intent intent = new Intent(Intent.ACTION_VIEW,uri);
startActivity(intent);
}
});
btnGoogleMap.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Uri uri = Uri.parse("https://maps.google.co.kr/maps?q="
+ 37.559133 + "," + 126.927824 + "&z=15");
Intent intent = new Intent(Intent.ACTION_VIEW,uri);
startActivity(intent);
}
});
//검색을 위해 putExtra()로 넘기는데, 첫번째 파라미터로 SearchManager.QUERY를 사용하고, 두번째 파라미터에는 검색할 단어를 넣는다.
btnGoogleSearch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY,"안드로이드");
startActivity(intent);
}
});
btnSendMsg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.putExtra("sms_body","안녕하세요");
intent.setData(Uri.parse("smsto:" + Uri.encode("010-1234-5743")));
startActivity(intent);
}
});
btnPicture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivity(intent);
}
});
}
}
- activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_margin="10dp"
tools:context=".MainActivity">
<Button
android:id = "@+id/btnCall"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text = "전화 걸기"
></Button>
<Button
android:id = "@+id/btnHome"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text = "홈페이지 열기"
></Button>
<Button
android:id = "@+id/btnGoogleMap"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text = "구글 맵 열기"
></Button>
<Button
android:id = "@+id/btnGoogleSearch"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text = "구글 검색하기"
></Button>
<Button
android:id = "@+id/btnSendMsg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text = "문자 보내기"
></Button>
<Button
android:id = "@+id/btnPicture"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text = "사진 찍기"
></Button>
</LinearLayout>
반응형
'Adroid Studio' 카테고리의 다른 글
AndroidStudio_안드로이드 스튜디오_프래그먼트 간단 사용법 (0) | 2022.09.02 |
---|---|
Android Studio_안드로이드 스튜디오 앱 만들기6_SQLite의 기본 (0) | 2022.09.01 |
Android Studio_안드로이드 스튜디오_4대컴포넌트_액티비티-1 (0) | 2022.08.26 |
Android Studio_옵션메뉴와 컨택스트 메뉴 차이 (0) | 2022.08.26 |
Android Studio_안드로이드 스튜디오_간단한 리스트 만들기2(RecyclerView) (0) | 2022.08.26 |