안드로이드의 의도는 무엇입니까?


347
  • 안드로이드 의 의도 는 무엇입니까 ?
  • 누군가가 예를 들어 설명 할 수 있습니까?
  • 의도 유형은 무엇이며 왜 사용하고 있습니까?
  • Android에서 인 텐트가 왜 그렇게 중요한가요?

메시지 기반 운영 체제 인 Windows와 마찬가지로 메시지를 보내면서 프로그램에 사용자 입력을 알리면 의도가 있습니다!
AminM

답변:


486

의도 작업을 수행 할 수있는 "의도"입니다; 다시 말해,

다른 앱 구성 요소 에서 작업을 요청하는 데 사용할 수있는 메시징 개체

의도는 기본적으로 어떤 일이 있었거나 일어나고 싶다는 메시지입니다. 의도에 따라 앱 또는 OS가이를 수신하고 반응 할 수 있습니다. 친구에게 John에게 무언가를하도록 지시하거나 X ( "의도 필터" )를 수행하여 X를 수행 할 수있는 친구에게 보내는 폭발적인 이메일이라고 생각하십시오 . 다른 사람들은 이메일을 무시합니다. 그러나 John (또는 X를 할 수있는 친구)은 그것에 반응 할 것입니다.

브로드 캐스트 인 텐트 (전화 벨 울림 또는 SMS 수신 등)를 들으려면 인 텐트가 전달되는 브로드 캐스트 리시버 를 구현합니다 . "사진 찍기"와 같이 다른 사람의 앱 의도를 처리 할 수 ​​있음을 선언하려면 앱의 매니페스트 파일에서 의도 필터 를 선언 합니다 .

다이얼러 팝업과 같은 일을하려는 의도를 해고하려는 경우 의도대로 해고하십시오 .


1
@Chirag Raval 인 텐트와 액션 리스너의 차이점은 무엇입니까?
mayooran

1
마지막 문장을 다시 설명해 주시겠습니까? 당신이 해고하려는 경우 ..
Shafizadeh

1
C # 대리자와 비슷합니까?
Paul

실제로 작업은 의도를 사용하여 다른 구성 요소에서 한 구성 요소를 시작할 수 있음을 의미합니다. 그것이 주로 사용되는 것입니다.
Sreekanth Karumanaghat

또한 이것에 추가하려면 ... 의도는 비동기 적입니다.
Sreekanth Karumanaghat

165

의도는 무엇입니까?

의도는 기본적으로 사이에 전달되는 메시지입니다 구성 요소 (예 : 활동 , 서비스, 방송 수신기,정보 제공자 ). 따라서 API 호출에 전달 된 매개 변수와 거의 같습니다. API 호출과 의도를 통한 컴포넌트 호출의 근본적인 차이점은 다음과 같습니다.

  • 인 텐트 기반 호출은 비동기 적이지만 API 호출은 동기식입니다.
  • API 호출은 컴파일 타임 바인딩이고 인 텐트 기반 호출은 런타임 바인딩입니다.

물론, 명시 적 의도 라고하는 것을 사용하여 API 호출과 똑같이 작동하도록 의도를 만들 수 있습니다. 그러나 종종 암시적인 의도 가가는 길이며 여기에 설명되어 있습니다.

다른 구성 요소를 호출하려는 구성 요소 는 작업 수행 의도 만 표현하면됩니다 . 그리고 존재하고 intent-filters를 통해 그러한 작업을 수행 할 수 있다고 주장하는 다른 구성 요소 는 Android 플랫폼에 의해 호출되어 작업을 수행합니다. 즉, 어떤 구성 요소도 서로의 존재를 인식하지 못하지만 최종 사용자에게 원하는 결과를 제공하기 위해 함께 작동 할 수 있습니다.

인 텐트, 인 텐트 필터 및 Android 플랫폼의 조합을 통해 구성 요소 간의 보이지 않는 연결이 이루어집니다.

이것은 다음과 같은 큰 가능성으로 이어집니다.

  • 런타임에 구성 요소를 믹스 앤 매치하거나 플러그 앤 플레이하십시오.
  • 내장 된 Android 애플리케이션을 사용자 정의 개발 애플리케이션으로 교체
  • 응용 프로그램 내부 및 응용 프로그램 간의 구성 요소 수준 재사용
  • 내가 말할 수 있다면 가장 세분화 된 수준의 서비스 방향.

다음은 Android 문서에서 의도 에 대한 추가 기술 정보 입니다.

의도는 수행 할 작업에 대한 추상적 인 설명입니다. startActivity 와 함께 사용 하여 활동 을 시작하고 broadcastIntent 를 관심있는 BroadcastReceiver 구성 요소 로 보내 거나 startService (Intent) 또는 bindService (Intent, ServiceConnection, int) 를 사용하여 백그라운드 서비스와 통신 할 수 있습니다.

인 텐트는 다른 응용 프로그램의 코드간에 런타임 런타임 바인딩을 수행하기위한 기능을 제공합니다. 가장 중요한 용도는 활동을 시작하는 데 있으며 활동 사이의 아교로 생각할 수 있습니다. 기본적으로 수행 할 작업에 대한 추상적 인 설명이 포함 된 수동 데이터 구조입니다. 의도적 인 기본 정보는 다음과 같습니다.

  • action ACTION_VIEW, ACTION_EDIT, ACTION_MAIN 등과 같이 수행 할 일반 작업입니다.
  • 데이터 연락처 데이터베이스의 개인 레코드와 같이 작동 할 데이터는 Uri로 표시됩니다.

더 알아보기


4
이 설명에서 컴퓨터 과학 개념을 사용해 주셔서 감사합니다. 이것은 토론을보다 구체적으로 만들고 특히 컴퓨터 공학에 능통 한 독자에게 도움이됩니다.
Donal Lafferty 2016 년

49

의도는 안드로이드에게 당신이하고 싶은 것을 말해주는 방법입니다 . 다시 말해, 당신은 당신의 의도를 설명합니다. 인 텐트는 특정 이벤트가 발생했음을 Android 시스템에 알리는 데 사용될 수 있습니다. Android의 다른 구성 요소는 인 텐트 필터를 통해이 이벤트에 등록 할 수 있습니다.

다음은 2 가지 유형의 의도입니다.

1. 명백한 의도

특정 구성 요소를 호출하는 데 사용됩니다. 시작할 구성 요소를 알고 있고 사용할 구성 요소를 사용자가 자유롭게 제어하지 않으려는 경우. 예를 들어, 활동이 2 개인 응용 프로그램이 있습니다. 활동 A 및 활동 B. 활동 A에서 활동 B를 시작하려고합니다.이 경우 명시 적 의도 타겟팅 활동 B를 정의한 후이를 사용하여 직접 호출하십시오.

암시 적 의도

수행하려는 작업에 대한 아이디어가 있지만 어떤 구성 요소를 시작해야하는지 모르는 경우에 사용됩니다. 또는 사용할 구성 요소 목록 중에서 선택할 수있는 옵션을 사용자에게 제공하려는 경우. 이러한 의도가 Android 시스템으로 전송되면 특정 조치 및 데이터 유형에 등록 된 모든 구성 요소를 검색합니다. 컴포넌트가 하나만 발견되면 Android가 컴포넌트를 직접 시작합니다. 예를 들어, 카메라를 사용하여 사진을 찍는 응용 프로그램이 있습니다. 응용 프로그램의 기능 중 하나는 사용자가 자신이 촬영 한 사진을 보낼 수 있다는 것입니다. 사용자가 사진을 보낼 수있는 응용 프로그램의 종류를 모르고, 사용자에게 둘 이상의 응용 프로그램이있는 경우 사용할 외부 응용 프로그램을 선택할 수있는 옵션을 제공하려고합니다. 이 경우 명시 적 의도를 사용하지 않습니다.

포함 의도에 관계없이 명시 적 의도는 항상 대상에 전달됩니다. 필터는 참조되지 않습니다. 그러나 암시 적 의도는 구성 요소의 필터 중 하나를 통과 할 수있는 경우에만 구성 요소에 전달됩니다.

인 텐트 필터

인 텐트가 Android 시스템으로 전송되면이 인 텐트에 적합한 응용 프로그램이 결정됩니다. 이 유형의 의도에 대해 여러 구성 요소가 등록 된 경우 Android는 사용자에게 구성 요소 중 하나를 열 수있는 옵션을 제공합니다.

이 결정은 IntentFilters를 기반으로합니다. IntentFilters는 활동, 서비스 또는 브로드 캐스트 수신자가 응답 할 수있는 Intent 유형을 지정합니다. 인 텐트 필터는 구성 요소의 기능을 선언합니다. 활동 또는 서비스가 수행 할 수있는 작업과 수신자가 처리 할 수있는 브로드 캐스트 유형을 지정합니다. 해당 컴포넌트가 선언 된 유형의 의도를 수신 할 수 있습니다. IntentFilters는 일반적으로 AndroidManifest.xml 파일을 통해 정의됩니다. BroadcastReceiver의 경우 코딩에서이를 정의 할 수도 있습니다. IntentFilters는 카테고리, 조치 및 데이터 필터로 정의됩니다. 추가 메타 데이터를 포함 할 수도 있습니다.

구성 요소가 인 텐트 필터를 정의하지 않으면 명시 적 인 텐트 만 호출 할 수 있습니다.

다음은 필터를 정의하는 두 가지 방법입니다.

1. 매니페스트 파일

매니페스트에서 인 텐트 필터를 정의하면 필터에 정의 된 인 텐트에 반응하기 위해 응용 프로그램을 실행할 필요가 없습니다. Android는 애플리케이션이 설치 될 때 필터를 등록합니다.

2. 브로드 캐스트 수신기

당신이 원하는 경우 방송 수신기는 응용 프로그램이 실행되는 경우에만 의도를받을 수 있습니다. 그런 다음 런타임 동안 프로그래밍 방식으로 의도 필터를 정의해야합니다. 이 기능은 브로드 캐스트 리시버에서만 작동합니다.


12

단일 활동을 작성한 후 첫 번째 활동의 정보가 있거나없는 다른 태스크를 수행하기 위해 다른 활동으로 전환해야합니다.

안드로이드 플랫폼은 인 텐트 인터페이스를 통한 전환을 허용합니다.

여기에서 단어를 가져옵니다 : 인 텐트 데모 사용 및 코드 파일도 제공했기 때문에이 예제를 진행하는 것이 좋습니다. 사용하고 쉽게 이해할 수 있습니다.


의도는 활동 간 전환 이상의 것입니다. 개요를 제공하는 것이 더 도움이 될 것입니다.
Vaddadi Kartick

@KartickVaddadi 당신의 요점에 동의하십시오. 이것은 Intent의 한 가지 사용법에 대한 나의 대답이었습니다!
Paresh Mayani

Paresh, 링크 blog.vimviv.com/android/intent-android 가 더 이상 작동하지 않습니다 :(
user2060383

9

안드로이드 의도

Android Intent를 사용하면 한 Android 활동에서 다른 Android 활동으로 이동할 수 있습니다. 이 튜토리얼에서는 예제를 통해 다양한 유형의 Android 인 텐트에 대해서도 설명합니다.

Android Intent는 하나의 활동에서 다른 활동으로 통신하는 데 사용되는 간단한 메시지 오브젝트로 정의 될 수 있습니다.

의도는 응용 프로그램의 의도를 정의합니다. 또한 활동간에 데이터를 전송하는 데 사용됩니다.

Android Intent를 사용하여 다음 3 가지 작업을 수행 할 수 있습니다.

  1. 현재 활동에서 다른 활동 또는 서비스 열기
  2. 활동과 서비스 간 데이터 전달
  3. 다른 응용 프로그램에 책임을 위임하십시오. 예를 들어 인 텐트를 사용하여 URL을 표시하기 위해 브라우저 응용 프로그램을 열 수 있습니다.

의도는 크게 두 가지 범주로 분류 할 수 있습니다. 이 카테고리에는 키워드가 없으며 Android 인 텐트 사용 방식에 대한 광범위한 분류 만 있습니다.

명시 적 Android 의도

명시 적 Android 의도는 Android 시스템에서 호출해야하는 구성 요소를 명시 적으로 정의하는 의도입니다.

 Intent MoveToNext = new Intent (getApplicationContext(), SecondActivity.class);

암시 적 Android 의도

암시 적 Android 의도는 정확한 구성 요소를 정의하는 대신 수행하려는 조치를 정의하는 의도입니다. 이 조치를 처리하기로 한 결정은 운영 체제에 맡겨집니다. OS는 암시 적 의도에 가장 적합한 구성 요소를 결정합니다. 예를 보자.

    Intent sendIntent = new Intent();
    sendIntent.setAction(Intent.ACTION_SEND);

자세한 내용은 아래를 방문하십시오.

http://developer.android.com/reference/android/content/Intent.html


9

그들의 문서에 따르면 :

의도는 별도의 구성 요소 (예 : 두 활동)간에 런타임 바인딩을 제공하는 객체입니다. 인 텐트는 앱의 "무언가를하려는 의도"를 나타냅니다. 다양한 작업에 인 텐트를 사용할 수 있지만 대부분 다른 활동을 시작하는 데 사용됩니다.

다음은 예제와의 링크입니다. http://developer.android.com/training/basics/firstapp/starting-activity.html#BuildIntent

문서에서 설명한대로 활동을 시작하려면 (활동이 무엇인지 이해해야 함) 다음과 같은 의도를 사용하십시오.

/** Called when the user clicks the Send button */
public void sendMessage(View view) {
    Intent intent = new Intent(this, DisplayMessageActivity.class);
    EditText editText = (EditText) findViewById(R.id.edit_message);
    String message = editText.getText().toString();
    intent.putExtra(EXTRA_MESSAGE, message);
    startActivity(intent);
}

8

의도는 수행 할 작업에 대한 추상적 인 설명입니다. startActivity와 함께 사용하여 활동을 시작하고 broadcastIntent를 관심있는 BroadcastReceiver 구성 요소로 보내거나 startService (Intent) 또는 bindService (Intent, ServiceConnection, int)를 사용하여 백그라운드 서비스와 통신 할 수 있습니다.

자세한 내용은 다음 링크를 참조하십시오.

1). http://developer.android.com/reference/android/content/Intent.html

2) http://developer.android.com/guide/topics/intents/intents-filters.html

삼). http://www.vogella.de/articles/AndroidIntent/article.html

더 많은 기사가 있습니다.


5

의도는 무엇입니까?

구성 요소에 전달되는 일종의 메시지 또는 정보입니다. 활동을 시작하고 웹 페이지를 표시하며 SMS를 보내고 이메일을 보내는 등의 작업에 사용됩니다.

안드로이드에는 두 가지 유형의 인 텐트가 있습니다.

암시 적 의도
명시 적 의도

암시 적 의도는 시스템 구성 요소를 호출하는 데 사용됩니다

Intent i = newIntent(android.content.Intent.ACTION_VIEW,Uri.parse(“http://www.amazon.com”));

startActivity(i);

명시 적 의도는 활동 클래스를 호출하는 데 사용됩니다.

의도 의도 = newIntent (this, SecondActivity.class);

startActivity(intent);

더 읽을 수 있습니다

http://www.vogella.com/tutorials/AndroidIntent/article.html#intents_overview http://developer.android.com/reference/android/content/Intent.html


2

인 텐트는 클래스이며 일부 작업을 수행하기위한 정보를 바인딩합니다.

예 : 사용자가 다음 작업을 수행 할 때 한 활동을 다른 활동으로 전달

현재 활동.


1

넓은 관점에서 Intent를 다음 과 같이 정의 할 수 있습니다.

한 활동이 다른 활동을 시작하려고 할 때 시작하려는 활동을 지정하는 Intent라는 오브젝트를 작성합니다.


0

Android 애플리케이션은 0 개 이상의 활동을 포함 할 수 있습니다. 응용 프로그램에 둘 이상의 활동이있는 경우 종종 하나의 활동을 탐색해야합니다. Android에서는 의도로 알려진 활동을 통해 활동을 탐색합니다. putExtra ()를 사용하여 의도를 통해 시작하려는 활동에 일부 데이터를 전달할 수 있습니다.


0

종이 Deep Dive into Android IPC/Binder Framework atAndroid Builders Summit 2013 링크에서

의도는 작지만 효과적인 라인에서 이해됩니다

  1. 안드로이드는 의도를 통해 간단한 형태의 IPC (Inter Process Communication)를 지원합니다
  2. 인 텐트 메시징은 Android 컴포넌트 (활동, 서비스, 컨텐츠 제공자, 브로드 캐스트 리시버) 간의 비동기 통신을위한 프레임 워크입니다.
  3. 이러한 구성 요소는 동일하거나 다른 앱 (예 : 프로세스)에서 실행될 수 있습니다.
  4. 포인트 투 포인트 및 게시 구독 메시징 도메인을 모두 사용할 수 있습니다.
  5. 의도 자체는 수행 할 작업에 대한 설명과 수신자에게 전달 될 데이터를 포함하는 메시지를 나타냅니다.

에서 스레드 안드로이드 건축가 다이앤 Hackborn의 간단한 대답은로 진술 data container된 것이 사실이다.

안드로이드 아키텍처 관점에서 :

의도는 프로세스 간 통신에 사용되는 데이터 컨테이너입니다. Binder안드로이드 아키텍처 관점에서 구축되었습니다 .


0

의도는 한 활동에서 다른 활동을 시작하는 데 사용됩니다. 기본적으로 한 활동에서 다른 활동으로 데이터를 전송하는 것과 같은 여러 가지 목적과 트리거 목적으로 사용됩니다.

그들은 기본적으로 두 가지 유형입니다

  1. 암시 적 의도.

  2. 명백한 의도.

초보자로서 나는 이것을 많이 알고 있으며, 이것이 안드로이드 의도에 대한 기본적인 아이디어를 줄 것이라고 생각합니다.


2
제발 이 링크를 읽고 질문에 대답하는 방법을.
Bonatti
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.