본문 바로가기
Adroid Studio

Android Studio_안드로이드 스튜디오_4대컴포넌트_액티비티-2

by 디디찐 2022. 8. 29.
반응형

■단방향 액티비티

한쪽 방향으로 데이터를 전달하는 방법이다.

 

 

  • 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>
반응형