Study Record

[안드로이드] Intent 살펴보기 본문

안드로이드

[안드로이드] Intent 살펴보기

초코초코초코 2023. 6. 27. 20:28
728x90

😶 Intent 개요

Intent 는 메시징 객체로, 다른 앱 구성 요소(Activity, Service, BroadCast, 콘텐츠 제공자)로부터 작업을 요청하는 데 사용할 수 있다.

 

기본적인 사용 사례 - Activity 시작

Activity 는 앱 안의 단일 화면을 의미하는데 새로운 화면을 시작하고 싶다면 startActivity() 함수로 Intent 를 전달할 수 있는데 이 경우의 Intent 는 시작할 액티비티와 모든 필수 데이터를 가진다.

 

인텐트에는 명시적 인텐트와 암시적 인텐트 두 가지 유형이 있다.

 

 

😶 명시적 인텐트

일반적으로 앱 안에서 구성 요소를 시작할 때 사용된다. 

ex. 새로운 Activity 시작, Service 시작

 

 

😶 암시적 인텐트

특정 구성 요소의 이름을 정의하지 않지만 그 대신 수행할 일반적인 작업을 선언하여 앱의 구성 요소가 이를 처리할 수 있도록 해준다. 

ex. 사용자에게 지도에 있는 위치를 보여주고 싶을 때, 해당 기능을 갖춘 다른 앱을 실행하도록 요청한다.

 

앱의 매니패스트 파일에는 인텐트 필터가 선언되어 있는데, 암시적 인텐트로 특정 작업이 가능한지 Android 시스템에 요청하면 기기에 설치된 다른 앱들의 매니패스트 파일의 인텐트 필터를 보고 특정 작업이 가능하다면(해당 인텐트와 일치하는 인텐트 필터가 존재한다면) 그 앱을 실행한다.

 

만약, 암시적 인텐트에 해당하는 호환되는 인텐트 필터가 여러 앱에서 발견되는 경우 Android 시스템에서 사용자에게 대화상자를 요청하여 선택할 수 있게 한다.

 

 

- 인텐트 필터는 매니페스트 파일의 앱 구성 요소가 선언된 태그 안에 존재하며, 해당 구성 요소가 수신하고자 하는 인텐트 유형을 나타낸다.

- 앱의 구성 요소 중 하나인 Activity 의 인텐트 필터를 따로 지정하지 않으면 명시적 인텐트로만 해당 Activity 를 시작할 수 있다.

 

 

예시) 데이터 유형이 텍스트인 ACTION_SEND 인텐트를 수신하는 인텐트 필터

<activity android:name="ShareActivity">
    <intent-filter>
        <action android:name="android.intent.action.SEND"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:mimeType="text/plain"/>
    </intent-filter>
</activity>

 

 

😶 보류 인텐트(PendingIntent)

PendingIntent 는 Intent 객체를 감싸고 있는 객체로, 외부 애플리케이션에 권한을 허가하여 안에 들어 있는 Intent 를 마치 본인 앱의 자체 프로세스에서 실행하는 것처럼 사용하게 하는 것이 기본 목적이다.

 

 

1. 알림(NotificationManager)으로 어떤 작업을 수행할 때 인텐트가 실행되도록 선언한다.

2. 향후 지정된 시간에 인텐트가 실행되도록 선언한다.(AlarmManager)

3. 앱 위젯으로 어떤 작업을 수행할 때 인텐트가 실행되도록 선언한다.

 

 

 

 

인텐트 및 인텐트 필터  |  Android 개발자  |  Android Developers

An Intent is a messaging object you can use to request an action from another app component . Although intents facilitate communication between components in several ways, there are three fundamental use cases: An Activity represents a single screen in…

developer.android.com

 

 

 

 

 

 

728x90