Android-인 텐트 및 필터

안드로이드 Intent수행 할 작업에 대한 추상적 인 설명입니다. 함께 사용할 수 있습니다startActivity 활동을 시작하려면 broadcastIntent 관심있는 BroadcastReceiver 구성 요소로 전송합니다. startService(Intent) 또는 bindService(Intent, ServiceConnection, int) 백그라운드 서비스와 통신합니다.

The intent itself, an Intent object, is a passive data structure holding an abstract description of an operation to be performed.

예를 들어 이메일 클라이언트를 시작하고 Android 기기를 사용하여 이메일을 보내는 활동이 있다고 가정 해 보겠습니다. 이를 위해 귀하의 활동은 ACTION_SEND와 함께 적절한chooser, Android Intent Resolver. 지정된 선택기는 사용자가 이메일 데이터를 보내는 방법을 선택할 수있는 적절한 인터페이스를 제공합니다.

Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));
email.putExtra(Intent.EXTRA_EMAIL, recipients);
email.putExtra(Intent.EXTRA_SUBJECT, subject.getText().toString());
email.putExtra(Intent.EXTRA_TEXT, body.getText().toString());
startActivity(Intent.createChooser(email, "Choose an email client from..."));

위의 구문은 이메일 활동을 시작하기 위해 startActivity 메소드를 호출하고 있으며 결과는 다음과 같아야합니다.

예를 들어 Android 장치의 웹 브라우저에서 URL을 열어야하는 활동이 있다고 가정합니다. 이를 위해 활동은 ACTION_WEB_SEARCH Intent를 Android Intent Resolver로 보내 웹 브라우저에서 주어진 URL을 엽니 다. Intent Resolver는 활동 목록을 구문 분석하고 의도와 가장 일치하는 것을 선택합니다 (이 경우에는 웹 브라우저 활동). 그런 다음 Intent Resolver는 웹 페이지를 웹 브라우저로 전달하고 웹 브라우저 활동을 시작합니다.

String q = "tutorialspoint";
Intent intent = new Intent(Intent.ACTION_WEB_SEARCH );
intent.putExtra(SearchManager.QUERY, q);
startActivity(intent);

위의 예는 다음과 같이 검색합니다. tutorialspoint Android 검색 엔진에서 활동에 tutorialspoint의 결과를 제공합니다.

활동, 서비스 및 브로드 캐스트 수신기와 같은 각 구성 요소 유형에 의도를 전달하기위한 별도의 메커니즘이 있습니다.

Sr. 아니요 방법 및 설명
1

Context.startActivity()

Intent 개체는이 메서드에 전달되어 새 활동을 시작하거나 기존 활동을 가져와 새로운 작업을 수행합니다.

2

Context.startService()

Intent 개체는 서비스를 시작하거나 진행중인 서비스에 새 지침을 전달하기 위해이 메서드에 전달됩니다.

Context.sendBroadcast()

Intent 개체는이 메서드에 전달되어 모든 관심 브로드 캐스트 수신자에게 메시지를 전달합니다.

의도 개체

Intent 객체는 Android 시스템에서 사용하는 정보뿐만 아니라 의도를 수신하는 구성 요소에서 사용하는 정보 번들입니다.

Intent 객체는 통신 중이거나 수행 할 작업에 따라 다음 구성 요소를 포함 할 수 있습니다.

동작

이것은 Intent 개체의 필수 부분이며 수행 할 작업 (또는 브로드 캐스트 인 텐트의 경우 발생하고보고되는 ​​작업)을 명명하는 문자열입니다. 액션은 나머지 의도 개체의 구조를 결정합니다. Intent 클래스는 서로 다른 인 텐트에 해당하는 여러 작업 상수를 정의합니다. 다음은 Android 인 텐트 표준 작업 목록입니다.

Intent 객체의 액션은 setAction () 메서드로 설정하고 getAction ()으로 읽을 수 있습니다.

데이터

인 텐트 필터에 데이터 사양을 추가합니다. 스펙은 데이터 유형 (mimeType 속성), URI 또는 ​​데이터 유형과 URI 모두 일 수 있습니다. URI는 각 부분에 대해 별도의 속성으로 지정됩니다.

URL 형식을 지정하는 이러한 속성은 선택 사항이지만 상호 의존적입니다.

  • 인 텐트 필터에 스키마가 지정되지 않은 경우 다른 모든 URI 속성은 무시됩니다.
  • 필터에 호스트가 지정되지 않은 경우 포트 속성과 모든 경로 속성이 무시됩니다.

setData () 메서드는 데이터를 URI로만 지정하고 setType ()은 데이터를 MIME 유형으로 만 지정하고 setDataAndType ()은 데이터를 URI와 MIME 유형으로 지정합니다. URI는 getData ()로 읽고 유형은 getType ()으로 읽습니다.

액션 / 데이터 쌍의 몇 가지 예는 다음과 같습니다.

Sr. 아니. 작업 / 데이터 쌍 및 설명
1

ACTION_VIEW content://contacts/people/1

식별자가 "1"인 사람에 대한 정보를 표시합니다.

2

ACTION_DIAL content://contacts/people/1

사람이 채워진 전화 다이얼러를 표시합니다.

ACTION_VIEW tel:123

주어진 번호가 채워진 전화 다이얼러를 표시합니다.

4

ACTION_DIAL tel:123

주어진 번호가 채워진 전화 다이얼러를 표시합니다.

5

ACTION_EDIT content://contacts/people/1

식별자가 "1"인 사람에 대한 정보를 편집합니다.

6

ACTION_VIEW content://contacts/people/

사용자가 검색 할 수있는 사람 목록을 표시합니다.

7

ACTION_SET_WALLPAPER

배경 화면 선택 설정 표시

8

ACTION_SYNC

데이터를 동기화 할 것입니다. 상수 값은 android.intent.action.SYNC

9

ACTION_SYSTEM_TUTORIAL

플랫폼 정의 자습서 (기본 자습서 또는 시작 자습서)가 시작됩니다.

10

ACTION_TIMEZONE_CHANGED

시간대가 변경되면 알려줍니다.

11

ACTION_UNINSTALL_PACKAGE

기본 제거 프로그램을 실행하는 데 사용됩니다.

범주

카테고리는 Intent 객체의 선택적 부분이며 인 텐트를 처리해야하는 구성 요소의 종류에 대한 추가 정보가 포함 된 문자열입니다. addCategory () 메서드는 Intent 객체에 범주를 배치하고 removeCategory ()는 이전에 추가 된 범주를 삭제하며 getCategories ()는 현재 객체에있는 모든 범주 집합을 가져옵니다. 다음은 Android 의도 표준 카테고리 목록입니다 .

아래 섹션에서 인 텐트 필터에 대한 세부 정보를 확인하여 인 텐트에 해당하는 적절한 활동을 선택하기 위해 카테고리를 사용하는 방법을 이해할 수 있습니다.

기타

이는 인 텐트를 처리하는 구성 요소에 전달되어야하는 추가 정보에 대한 키-값 쌍입니다. Extras는 각각 putExtras () 및 getExtras () 메서드를 사용하여 설정하고 읽을 수 있습니다. Android Intent Standard 추가 데이터 목록은 다음과 같습니다.

플래그

이러한 플래그는 Intent 객체의 선택적 부분이며 Android 시스템에 활동을 시작하는 방법과 시작된 후 처리하는 방법 등을 지시합니다.

Sr. 아니요 플래그 및 설명
1

FLAG_ACTIVITY_CLEAR_TASK

Context.startActivity ()에 전달 된 Intent에 설정된 경우이 플래그는 활동이 시작되기 전에 활동과 연관된 기존 태스크가 지워지도록합니다. 즉, 활동은 비어있는 작업의 새로운 루트가되고 이전 활동은 완료됩니다. FLAG_ACTIVITY_NEW_TASK와 함께 만 사용할 수 있습니다.

2

FLAG_ACTIVITY_CLEAR_TOP

설정되어 있고 시작되는 활동이 현재 작업에서 이미 실행 중이면 해당 활동의 새 인스턴스를 시작하는 대신 그 위에있는 다른 모든 활동이 닫히고이 Intent가 (이제 top) 새로운 의도로서의 오래된 활동.

FLAG_ACTIVITY_NEW_TASK

이 플래그는 일반적으로 "실행기"스타일 동작을 표시하려는 활동에서 사용됩니다. 사용자에게 수행 할 수있는 별도의 목록을 제공하며, 그렇지 않으면 실행하는 활동과 완전히 독립적으로 실행됩니다.

구성 요소 이름

이 선택적 필드는 Android입니다. ComponentNameActivity, Service 또는 BroadcastReceiver 클래스를 나타내는 개체입니다. 설정된 경우 Intent 개체는 지정된 클래스의 인스턴스로 전달됩니다. 그렇지 않으면 Android는 Intent 개체의 다른 정보를 사용하여 적절한 대상을 찾습니다.

컴포넌트 이름은 setComponent (), setClass () 또는 setClassName ()에 의해 설정되고 getComponent ()에 의해 읽 힙니다.

의도 유형

Android에서 지원하는 두 가지 유형의 인 텐트가 있습니다.

명시 적 의도

명시 적 의도는 애플리케이션의 내부 세계로 연결될 것입니다. 한 활동을 다른 활동에 연결하려는 경우 명시 적 의도로이 인용문을 수행 할 수 있습니다. 아래 이미지는 버튼을 클릭하여 첫 번째 활동을 두 번째 활동에 연결하는 것입니다.

이러한 인 텐트는 이름으로 대상 구성 요소를 지정하며 일반적으로 하위 서비스를 시작하거나 자매 활동을 시작하는 활동과 같은 애플리케이션 내부 메시지에 사용됩니다. 예를 들면-

// Explicit Intent by specifying its class name
Intent i = new Intent(FirstActivity.this, SecondActivity.class);

// Starts TargetActivity
startActivity(i);

암시 적 인 텐트

이러한 인 텐트는 대상의 이름을 지정하지 않으며 구성 요소 이름의 필드는 비워 둡니다. 암시 적 의도는 종종 다른 응용 프로그램에서 구성 요소를 활성화하는 데 사용됩니다. 예를 들면-

Intent read1=new Intent();
read1.setAction(android.content.Intent.ACTION_VIEW);
read1.setData(ContactsContract.Contacts.CONTENT_URI);
startActivity(read1);

위의 코드는 아래와 같은 결과를 제공합니다.

인 텐트를 수신하는 타겟 컴포넌트는 getExtras()소스 구성 요소에서 보낸 추가 데이터를 가져 오는 메서드입니다. 예를 들면-

// Get bundle object at appropriate place in your code
Bundle extras = getIntent().getExtras();

// Extract data using passed keys
String value1 = extras.getString("Key1");
String value2 = extras.getString("Key2");

다음 예는 다양한 Android 내장 애플리케이션을 실행하는 Android 인 텐트의 기능을 보여줍니다.

단계 기술
1 Android 스튜디오 IDE를 사용하여 Android 애플리케이션을 만들고 com.example.saira_000.myapplication 패키지 아래에서 My Application 으로 이름을 지정합니다 .
2 수정 SRC / 메인 / 자바 / MainActivity.java의 파일과 두 개의 버튼, 즉 해당하는 두 개의 리스너를 정의하는 코드를 추가합니다. 브라우저를 시작하고 전화를 시작합니다.
레이아웃 XML 파일 res / layout / activity_main.xml 을 수정 하여 선형 레이아웃에 세 개의 버튼을 추가합니다.
4 애플리케이션을 실행하여 Android 에뮬레이터를 시작하고 애플리케이션에서 수행 한 변경 결과를 확인합니다.

다음은 수정 된 주요 활동 파일의 내용입니다. src/com.example.My Application/MainActivity.java.

package com.example.saira_000.myapplication;

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;

public class MainActivity extends AppCompatActivity {
   Button b1,b2;

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

      b1=(Button)findViewById(R.id.button);
      b1.setOnClickListener(new View.OnClickListener() {

         @Override
         public void onClick(View v) {
            Intent i = new Intent(android.content.Intent.ACTION_VIEW, 
               Uri.parse("http://www.example.com"));
            startActivity(i);
         }
      });

      b2=(Button)findViewById(R.id.button2);
      b2.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            Intent i = new Intent(android.content.Intent.ACTION_VIEW,
               Uri.parse("tel:9510300000"));
            startActivity(i);
         }
      });
   }
}

다음 내용은 res/layout/activity_main.xml 파일-

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools" 
   android:layout_width="match_parent"
   android:layout_height="match_parent" 
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin" 
   tools:context=".MainActivity">
   
   <TextView
      android:id="@+id/textView1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Intent Example"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:textSize="30dp" />
      
   <TextView
      android:id="@+id/textView2"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point"
      android:textColor="#ff87ff09"
      android:textSize="30dp"
      android:layout_below="@+id/textView1"
      android:layout_centerHorizontal="true" />
      
   <ImageButton
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageButton"
      android:src="@drawable/abc"
      android:layout_below="@+id/textView2"
      android:layout_centerHorizontal="true" />
      
   <EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/editText"
      android:layout_below="@+id/imageButton"
      android:layout_alignRight="@+id/imageButton"
      android:layout_alignEnd="@+id/imageButton" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Start Browser"
      android:id="@+id/button"
      android:layout_alignTop="@+id/editText"
      android:layout_alignRight="@+id/textView1"
      android:layout_alignEnd="@+id/textView1"
      android:layout_alignLeft="@+id/imageButton"
      android:layout_alignStart="@+id/imageButton" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Start Phone"
      android:id="@+id/button2"
      android:layout_below="@+id/button"
      android:layout_alignLeft="@+id/button"
      android:layout_alignStart="@+id/button"
      android:layout_alignRight="@+id/textView2"
      android:layout_alignEnd="@+id/textView2" />
</RelativeLayout>

다음 내용은 res/values/strings.xml 두 개의 새로운 상수를 정의하려면-

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="app_name">My Applicaiton</string>
</resources>

다음은의 기본 콘텐츠입니다. AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.saira_000.myapplication">

   <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:supportsRtl="true"
      android:theme="@style/AppTheme">
      <activity android:name=".MainActivity">
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
      </activity>
   </application>
</manifest>

당신의 My Application신청. 나는 당신이 당신의AVD환경 설정을하는 동안. Android Studio에서 앱을 실행하려면 프로젝트의 활동 파일 중 하나를 열고

툴바에서 Run 아이콘을 클릭 합니다 .Android Studio는 AVD에 앱을 설치하고 시작하고 설정 및 애플리케이션에 문제가 없으면 다음 에뮬레이터가 표시됩니다. 창-

이제 클릭 Start Browser 버튼을 누르면 구성된 브라우저가 시작되고 아래와 같이 http://www.example.com이 표시됩니다.

비슷한 방법으로 전화 시작 버튼을 사용하여 전화 인터페이스를 시작할 수 있으며 이미 주어진 전화 번호로 전화를 걸 수 있습니다.

의도 필터

Intent가 다른 활동을 호출하는 데 어떻게 사용되었는지 살펴 보았습니다. Android OS는 필터를 사용하여 인 텐트와 관련된 지정된 작업, 카테고리, 데이터 체계의 도움으로 인 텐트를 처리 할 수있는 활동, 서비스 및 브로드 캐스트 수신기 세트를 정확히 찾아냅니다. 당신은 사용할 것입니다<intent-filter> 모든 활동, 서비스 또는 브로드 캐스트 수신기와 관련된 작업, 범주 및 데이터 유형을 나열하는 매니페스트 파일의 요소.

다음은 일부의 예입니다. AndroidManifest.xml 활동을 지정하는 파일 com.example.My Application.CustomActivity 언급 된 두 가지 작업, 하나의 범주 및 하나의 데이터 중 하나에 의해 호출 될 수 있습니다.

<activity android:name=".CustomActivity"
   android:label="@string/app_name">
   
   <intent-filter>
      <action android:name="android.intent.action.VIEW" />
      <action android:name="com.example.My Application.LAUNCH" />
      <category android:name="android.intent.category.DEFAULT" />
      <data android:scheme="http" />
   </intent-filter>
   
</activity>

이 활동이 위에서 언급 한 필터와 함께 정의되면 다른 활동은 다음 중 하나를 사용하여이 활동을 호출 할 수 있습니다. android.intent.action.VIEW, 또는 com.example.My Application.LAUNCH 해당 범주가 android.intent.category.DEFAULT.

그만큼 <data> 요소는 호출 할 활동에서 예상하는 데이터 유형을 지정하며 위의 예에서 사용자 정의 활동은 데이터가 "http : //"로 시작될 것으로 예상합니다.

인 텐트가 둘 이상의 활동 또는 서비스의 필터를 통과 할 수있는 상황이있을 수 있으며 사용자에게 활성화 할 구성 요소를 묻는 메시지가 표시 될 수 있습니다. 대상을 찾을 수 없으면 예외가 발생합니다.

활동을 호출하기 전에 다음 테스트 Android 검사가 있습니다.

  • 필터 <intent-filter>는 위에 표시된 것처럼 둘 이상의 작업을 나열 할 수 있지만이 목록은 비워 둘 수 없습니다. 필터에는 하나 이상의 <action> 요소가 포함되어야합니다. 그렇지 않으면 모든 인 텐트가 차단됩니다. 둘 이상의 작업이 언급되면 Android는 활동을 호출하기 전에 언급 된 작업 중 하나와 일치하려고 시도합니다.

  • 필터 <intent-filter>는 0 개, 1 개 또는 2 개 이상의 카테고리를 나열 할 수 있습니다. 언급 된 카테고리가없는 경우 Android는 항상이 테스트를 통과하지만 둘 이상의 카테고리가 언급 된 경우 인 텐트가 카테고리 테스트를 통과하려면 Intent 개체의 모든 카테고리가 필터의 카테고리와 일치해야합니다.

  • 각 <data> 요소는 URI 및 데이터 유형 (MIME 미디어 유형)을 지정할 수 있습니다. 다음과 같은 별도의 속성이 있습니다.scheme, host, port, 및 pathURI의 각 부분에 대해. URI와 데이터 유형을 모두 포함하는 Intent 개체는 유형이 필터에 나열된 유형과 일치하는 경우에만 테스트의 데이터 유형 부분을 통과합니다.

다음 예는 위의 예를 수정 한 것입니다. 여기서는 하나의 인 텐트가에 정의 된 두 개의 활동을 호출하는 경우 Android가 충돌을 해결하는 방법, 다음으로 필터를 사용하여 사용자 지정 활동을 호출하는 방법, 그리고 Android가 인 텐트에 대해 정의 된 적절한 활동을 제출하지 않는 경우 세 번째는 예외 사례입니다.

단계 기술
1 Android 스튜디오를 사용하여 Android 애플리케이션을 만들고 com.example.tutorialspoint7.myapplication 패키지 아래에서 My Application 으로 이름을 지정합니다 . .
2 src / Main / Java / MainActivity.java 파일을 수정 하고 레이아웃 파일에 정의 된 3 개의 버튼에 해당하는 3 개의 리스너를 정의하는 코드를 추가합니다.
src / Main / Java / CustomActivity.java 파일을 추가하여 다른 인 텐트에 의해 호출되는 하나의 사용자 정의 활동을 갖습니다.
4 레이아웃 XML 파일 res / layout / activity_main.xml 을 수정 하여 선형 레이아웃에 세 개의 버튼을 추가합니다.
5 하나의 레이아웃 XML 파일 res / layout / custom_view.xml 을 추가하여 의도를 통해 전달 된 데이터를 표시하는 간단한 <TextView>를 추가합니다.
6 AndroidManifest.xml 을 수정 하여 <intent-filter>를 추가하여 사용자 지정 활동을 호출하는 인 텐트에 대한 규칙을 정의합니다.
7 애플리케이션을 실행하여 Android 에뮬레이터를 시작하고 애플리케이션에서 수행 한 변경 결과를 확인합니다.

다음은 수정 된 주요 활동 파일의 내용입니다. src/MainActivity.java.

package com.example.tutorialspoint7.myapplication;

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;

public class MainActivity extends AppCompatActivity {
   Button b1,b2,b3;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      b1=(Button)findViewById(R.id.button);
      b1.setOnClickListener(new View.OnClickListener() {
      
         @Override
         public void onClick(View v) {
            Intent i = new Intent(android.content.Intent.ACTION_VIEW,
               Uri.parse("http://www.example.com"));
            startActivity(i);
         }
      });

      b2 = (Button)findViewById(R.id.button2);
      b2.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            Intent i = new Intent("com.example.
               tutorialspoint7.myapplication.
                  LAUNCH",Uri.parse("http://www.example.com"));
            startActivity(i);
         }
      });

      b3 = (Button)findViewById(R.id.button3);
      b3.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            Intent i = new Intent("com.example.
               My Application.LAUNCH",
                  Uri.parse("https://www.example.com"));
            startActivity(i);
         }
      });
   }
}

다음은 수정 된 주요 활동 파일의 내용입니다. src/com.example.My Application/CustomActivity.java.

package com.example.tutorialspoint7.myapplication;

import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.widget.TextView;

/**
 * Created by TutorialsPoint7 on 8/23/2016.
 */
public class CustomActivity extends Activity {
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.custom_view);
      TextView label = (TextView) findViewById(R.id.show_data);
      Uri url = getIntent().getData();
      label.setText(url.toString());
   }
}

다음 내용은 res/layout/activity_main.xml 파일-

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:paddingBottom="@dimen/activity_vertical_margin"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   tools:context="com.example.tutorialspoint7.myapplication.MainActivity">

   <TextView
      android:id="@+id/textView1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Intent Example"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:textSize="30dp" />

   <TextView
      android:id="@+id/textView2"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point"
      android:textColor="#ff87ff09"
      android:textSize="30dp"
      android:layout_below="@+id/textView1"
      android:layout_centerHorizontal="true" />

   <ImageButton
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageButton"
      android:src="@drawable/abc"
      android:layout_below="@+id/textView2"
      android:layout_centerHorizontal="true" />

   <EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/editText"
      android:layout_below="@+id/imageButton"
      android:layout_alignRight="@+id/imageButton"
      android:layout_alignEnd="@+id/imageButton" />

   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Start Browser"
      android:id="@+id/button"
      android:layout_alignTop="@+id/editText"
      android:layout_alignLeft="@+id/imageButton"
      android:layout_alignStart="@+id/imageButton"
      android:layout_alignEnd="@+id/imageButton" />

   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Start browsing with launch action"
      android:id="@+id/button2"
      android:layout_below="@+id/button"
      android:layout_alignLeft="@+id/button"
      android:layout_alignStart="@+id/button"
      android:layout_alignEnd="@+id/button" />
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Exceptional condition"
      android:id="@+id/button3"
      android:layout_below="@+id/button2"
      android:layout_alignLeft="@+id/button2"
      android:layout_alignStart="@+id/button2"
      android:layout_toStartOf="@+id/editText"
      android:layout_alignParentEnd="true" />
</RelativeLayout>

다음 내용은 res/layout/custom_view.xml 파일-

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical" android:layout_width="match_parent"
   android:layout_height="match_parent">
   <TextView android:id="@+id/show_data"
      android:layout_width="fill_parent"
      android:layout_height="400dp"/>
</LinearLayout>

다음 내용은 res/values/strings.xml 두 개의 새로운 상수를 정의하려면-

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="app_name">My Application</string>
</resources>

다음은의 기본 콘텐츠입니다. AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.tutorialspoint7.myapplication">

   <application
      android:allowBackup = "true"
      android:icon = "@mipmap/ic_launcher"
      android:label = "@string/app_name"
      android:supportsRtl = "true"
      android:theme = "@style/AppTheme">
      <activity android:name = ".MainActivity">
         <intent-filter>
            <action android:name = "android.intent.action.MAIN" />
            <category android:name = "android.intent.category.LAUNCHER" />
         </intent-filter>
      </activity>
      
      <activity android:name="com.example.tutorialspoint7.myapplication.CustomActivity">

         <intent-filter>
            <action android:name = "android.intent.action.VIEW" />
            <action android:name = "com.example.tutorialspoint7.myapplication.LAUNCH" />
            <category android:name = "android.intent.category.DEFAULT" />
            <data android:scheme = "http" />
         </intent-filter>

      </activity>
   </application>

</manifest>

당신의 My Application신청. 나는 당신이 당신의AVD환경 설정을하는 동안. Android Studio에서 앱을 실행하려면 프로젝트의 활동 파일 중 하나를 열고

툴바에서 Run 아이콘을 클릭 합니다. Android Studio는 AVD에 앱을 설치하고 시작하고 설정 및 애플리케이션에 문제가 없으면 Emulator 창에 다음과 같이 표시됩니다.

이제 첫 번째 버튼 "보기 작업으로 브라우저 시작"으로 시작하겠습니다. 여기에서 "android.intent.action.VIEW"필터를 사용하여 사용자 지정 활동을 정의했으며 웹 브라우저를 시작하는 Android에서 정의한 VIEW 작업에 대한 기본 활동이 이미 하나 있습니다. 따라서 Android는 다음 두 가지 옵션을 표시하여 활동을 선택합니다. 시작하고 싶습니다.

이제 브라우저를 선택하면 Android가 웹 브라우저를 시작하고 example.com 웹 사이트를 열지 만 IndentDemo 옵션을 선택하면 Android는 전달 된 데이터를 캡처하고 다음과 같이 텍스트보기에 표시하는 CustomActivity를 시작합니다.

이제 뒤로 버튼을 사용하여 돌아가서 "시작 작업으로 브라우저 시작"버튼을 클릭합니다. 여기에서 Android는 필터를 적용하여 활동 정의를 선택하고 사용자 지정 활동을 시작합니다.

다시 뒤로 버튼을 사용하여 돌아가서 "예외 조건"버튼을 클릭합니다. 여기서 Android는 주어진 인 텐트에 대해 유효한 필터를 찾으려고하지만 이번에는 데이터를 다음과 같이 사용했기 때문에 정의 된 유효한 활동을 찾지 못합니다. https 대신에 http 우리가 올바른 조치를 취하고 있지만 Android는 예외를 발생시키고 다음 화면을 표시합니다.