TOP
본문 바로가기
Java/Java Android

[Android] 인텐트(Intent) - 3: 암시적 인텐트

by 기록자_Recordian 2025. 4. 30.
728x90
반응형
이전 내용
 

[Android] 인텐트 (Intent) 2 - 명시적 인텐트 예제

이전 내용 [Android] 인텐트(Intent) - 1: 명시적 인텐트이전 내용 [Android] 위젯 - 평점 (RatingBar)이전 내용 [Android] 컴파운드 버튼 3 - 토글 버튼이전 내용 [Android] 컴파운드 버튼 2 - 라디오 버튼이전 내용

puppy-foot-it.tistory.com


암시적 인텐트 예제

 

Q. 버튼 하나당 한 가지 구현을 하는 총 4가지 버튼 생성하기

각 버튼에는 기능이 한 가지씩 구현되어야 하는데, 해당 기능들은 각각

  • 전화걸기
  • 지도보기
  • 웹브라우저 (인터넷 접속)
  • 연락처 보기

[activity_main.xml]

<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:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/call"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="전화걸기"
        android:onClick="onClick" />

    <Button
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="지도보기"
        android:onClick="onClick" />

    <Button
        android:id="@+id/web"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="웹브라우저"
        android:onClick="onClick" />

    <Button
        android:id="@+id/contact"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="연락처 보기"
        android:onClick="onClick" />

</LinearLayout>

 

 

[MainActivity.java]

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

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

    public void onClick(View view) {
        Intent intent = null;
        int id = view.getId();
        if (id == R.id.web) {
            intent = new Intent(Intent.ACTION_VIEW,
                    Uri.parse("http://google.com"));
        } else if (id == R.id.call) {
            intent = new Intent(Intent.ACTION_DIAL,
                    Uri.parse("tel: (+82)12345678"));
        } else if (id == R.id.map) {
            intent = new Intent(Intent.ACTION_VIEW,
                    Uri.parse("geo:37.30,127.2?z=10"));
        } else if (id == R.id.contact) {
            intent = new Intent(Intent.ACTION_VIEW,
                    Uri.parse("content://contacts/people/"));
        }
         if (intent != null) {
             startActivity(intent);
        }
    }
}

 

UI 설정:

  • onCreate(Bundle savedInstanceState): 액티비티가 생성될 때 호출되는 메서드로, UI 레이아웃 설정.
  • setContentView(R.layout.activity_main);: activity_main.xml 레이아웃 파일을 이 액티비티에 적용.

onClick 메서드:

  • 사용자가 특정 버튼을 클릭할 때 호출되는 메서드.
  • public void onClick(View view): 메서드의 매개변수로 클릭된 버튼의 뷰 객체를 받는다.

Intent 생성 및 시작:

  • Intent intent = null;: 클릭된 버튼의 ID에 따라 적절한 Intent 생성.
  • 여러 버튼 클릭에 따라 다음과 같은 행동을 정의:
    • 웹 브라우저 열기: R.id.web 클릭 시 구글 웹사이트를 여는 Intent 생성.
    • 전화 걸기: R.id.call 클릭 시 전화 다이얼러를 여는 Intent 생성.
    • 지도 보기: R.id.map 클릭 시 특정 위치의 지도를 여는 Intent 생성.
    • 연락처 열기: R.id.contact 클릭 시 연락처 목록을 여는 Intent 생성.

Intent가 null이 아닐 때:

  • if (intent != null) { startActivity(intent); }: 생성된 Intent가 유효한 경우, 새로운 액티비티 시작.

 

그리고, manifests 폴더의 AndroidManifest.xml 파일의 상단에 해당 코드를 추가한다.

<uses-feature
    android:name="android.hardware.telephony"
    android:required="false" />
<uses-feature
    android:name="android.hardware.camera"
    android:required="false" />

<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.INTERNET" />

 

1. uses-feature

이 태그는 애플리케이션이 특정 하드웨어 기능을 사용할 수 있음을 명시.

  • <uses-feature android:name="android.hardware.telephony" android:required="false" />
    • 전화 기능을 사용할 수 있음을 나타낸다.
    • android:required="false"로 설정되어 있어, 이 기능이 없어도 애플리케이션이 작동할 수 있음을 명시.
  • <uses-feature android:name="android.hardware.camera" android:required="false" />
    • 카메라 기능을 사용할 수 있음을 나타낸다.
    • 마찬가지로 required가 false이므로, 카메라가 없더라도 앱은 사용 가능.

2. uses-permission

이 태그는 애플리케이션이 특정 기능을 사용하기 위해 필요한 권한 요청.

  • <uses-permission android:name="android.permission.CALL_PHONE" />
    • 전화 전화를 걸기 위해 필요한 권한.
  • <uses-permission android:name="android.permission.CAMERA" />
    • 카메라에 접근하기 위해 필요한 권한.
  • <uses-permission android:name="android.permission.READ_CONTACTS" />
    • 사용자의 연락처에 접근하기 위한 권한.
  • <uses-permission android:name="android.permission.INTERNET" />
    • 인터넷에 접근하기 위한 권한으로, 네트워크 연결을 통해 데이터 전송 및 웹 페이지를 열기 위해 필요.

 

[실행]

1. 전화걸기

 

2. 지도보기

 

 

3. 인터넷 접속

 

4. 연락처 보기


다음 내용

 

728x90
반응형