안녕하세요 ! 초보개발자 입니다.
이 블로그는 개인 공부 정리용 블로그 입니다.
혹 잘못된 내용이 있다면 지적 부탁드리겠습니다.
그리고 질문주신다면 최대한 아는선에서 답변드리도록 하겠습니다.
그럼 시작하도록 하겠습니다.
암시적 인텐트(Implicit Intent)
암시적 인텐트는 명시적 인텐트와 같이 호출할 컴포넌트를 정확하게 아는 것이 아니라 MIME타입에 따라 안드로이드 시스템에서 적절한 다른 애플리케이션의 액티비티를 찾은 후 띄우는 방식을 사용 합니다. 즉, 설치되어 있는 애플리케이션들에 대한 정보를 알고 있는 안드로이드 시스템이 인텐트를 이용해 요청한 정보를 처리할 수 있는 컴포넌트를 찾아본 다음 그 결과를 보여주는 과정입니다.
암시적 인텐트는 액션과 데이터로 구성이 되지만 그외에 범주(category), 타입(Type), 컴포넌트(Component), 부가데이터(Extras)로 구성되어 있습니다.
액션(action) - 액션은 호출 대상 컴포넌트가 처리해 주었으면 하는 하는 작업이 action에 정의 됩니다. ACTION_MAIN, ACTION_VIEW, ACTION_CALL 등 이 있습니다.
데이터(data)- 데이터는 호출할 액티비티가 처리해줬으면 하는 데이터의 주소 입니다. 이러한 주소는 URI 형식으로 되어있으며 전화번호,웹의 주소등 여러가지 형태가 있을 수 있습니다.
범주(category) - 액션이 실행되는데 필요한 추가적인 정보를 제공합니다. CATEGORY_LAUNCHER는 최상위 애플리케이션으로 설치된 애플리케이션들의 목록을 보여주는 애플리케이션 런처 화면에 이 애플리케이션을 보여주어야한다는 것을 의미합니다.
타입(type) - 인텐트에 들어가는 데이터의 MIME 타입을 명시적으로 지정합니다. 보통 MIME 타입은 데이터 만으로도 구별이 가능하지만 명시적으로 지정할 필요가 있는 경우도 있습니다.
컴포넌트(component) - 인텐트에 사용될 컴포넌트 클래스 이름을 명시적으로 지정합니다.
부가데이터(extras) - 인텐트는 추가적인 정보를 넣을 수 있습니다. 인텐트에 더많은 정보를 넣어 다른 애플리케이션에 전달 할 수 있습니다.
예제를 통해서 알아보도록 하겠습니다.
XML 화면입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/startActivity" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="전화걸기" android:layout_alignTop="@+id/textView" android:layout_centerHorizontal="true" android:layout_marginTop="52dp" /> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="전화걸기 버튼을 누르면 010-1234-4567 로 전화를 걸 수 있습니다." android:textSize="13dp" android:layout_alignParentTop="true" android:layout_alignParentStart="true" android:layout_marginTop="25dp" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="네이버로 이동 버튼을 누르면 네이버 웹사이트가 나타납니다." android:textSize="13dp" android:layout_marginTop="47dp" android:layout_below="@+id/startActivity" android:layout_alignParentStart="true" /> <Button android:id="@+id/startActivity2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="네이버로 이동" android:layout_marginTop="58dp" android:layout_below="@+id/textView1" android:layout_alignStart="@+id/startActivity" /> </RelativeLayout> | cs |
메인 화면 입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | package com.example.administrator.intenttest; import android.content.Intent; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MainActivity extends AppCompatActivity implements View.OnClickListener { Button activityStart; Button actiivityStart2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); activityStart= (Button)findViewById(R.id.startActivity); activityStart.setOnClickListener(this); actiivityStart2 = (Button)findViewById(R.id.startActivity2); actiivityStart2.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.startActivity: Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("tel:010-1234-5678")); startActivity(intent); break; case R.id.startActivity2 : Intent intent1 = new Intent(Intent.ACTION_VIEW,Uri.parse("http://m.naver.com")); startActivity(intent1); break; } } } | cs |
이상으로 암시적 인텐트에 대해서 알아 보았습니다.
'프로그래밍 > 안드로이드' 카테고리의 다른 글
[안드로이드] 알림창(AlertDialog) 이용하기 (1) | 2017.05.10 |
---|---|
[안드로이드] 토스트(Toast) 메시지 사용하기 (1) | 2017.05.10 |
[안드로이드] 인텐트(Intent) 이용하기(2) - 명시적 인텐트(Explicit Intent) (1) | 2017.05.06 |
[안드로이드] 인텐트(Intent) 이용하기(1) - 다른 액티비티로 이동 (1) | 2017.05.05 |
[안드로이드] 레이아웃 인플레이션(Layout Inflation) (2) | 2017.05.04 |