lightbulb_outline Help shape the future of the Google Play Console, Android Studio, and Firebase. Start survey

공통 인텐트

인텐트는 Intent 객체에서 수행하고자 하는 단순한 작업을 ("지도 보기" 또는 "사진 찍기" 등) 묘사함으로써 또 다른 앱에서 액티비티를 시작할 수 있도록 해주는 객체입니다. 이런 유형의 인텐트를 암시적 인텐트라고 합니다. 왜냐하면 시작할 앱 구성 요소를 지정하는 대신 작업을 지정하고 그 작업을 수행하기 위한 약간의 데이터를 제공하기 때문입니다.

startActivity() 또는 startActivityForResult()를 호출하여 암시적 인텐트를 전달하면, 시스템은 그것을 처리할 수 있는 앱을 찾아 인텐트를 확인하고 해당하는 Activity를 시작합니다. 인텐트를 처리할 수 있는 앱이 하나 이상 있는 경우, 시스템은 사용할 앱을 선택할 수 있는 대화상자를 사용자에게 표시합니다.

이 페이지에서는 일반적인 작업을 수행하는데 사용하는 다양한 암시적 인텐트를 설명하며, 이 설명은 인텐트를 처리하는 앱의 유형별로 구성됩니다. 또한 각 섹션에서는 앱의 동일한 작업 수행 기능을 알리기 위해 인텐트 필터를 생성하는 방법도 소개합니다.

주의: 암시적 인텐트를 받을 수 있는 앱이 기기에 없을 경우, 여러분의 앱이 startActivity()를 호출하면 작동 중단됩니다. 인텐트를 수신할 앱이 있는지를 먼저 확인하려면, Intent 객체에서 resolveActivity()를 호출합니다. 결과가 null이 아닌 경우, 인텐트를 처리할 수 있는 앱이 최소한 하나가 있으므로, startActivity()를 호출해도 안전합니다. 결과가 null이면 해당 인텐트를 사용해서는 안 되며, 가능하면 해당 인텐트를 호출하는 기능을 비활성화해야 합니다.

인텐트나 인텐트 필터 생성 방법을 잘 모르는 분은 인텐트 및 인텐트 필터를 읽으실 것을 권합니다.

개발 호스트로부터 이 페이지에 열거된 인텐트를 내보내는 방법은 Android 디버그 브리지로 인텐트 확인을 참조하세요.

Google Voice Actions

Google Voice Actions는 음성 명령에 응답하여 이 페이지에 열거된 일부 인텐트를 내보냅니다. 자세한 내용은 Google Voice Actions에서 발생하는 인텐트를 참조하세요.

알람 시계

알람 만들기

Google Voice Actions

  • "알람을 오전 7시에 맞추세요"

새 알람을 설정하려면 ACTION_SET_ALARM 작업을 사용하고 아래에 정의된 엑스트라를 사용해 시간과 메시지 등의 알람 세부정보를 지정합니다.

참고: Android 2.3 (API 레벨 9) 이상에서는 시간, 분 및 메시지 엑스트라만 이용할 수 있습니다. 그 밖의 엑스트라는 차후 버전의 플랫폼에 추가되었습니다.

작업
ACTION_SET_ALARM
데이터 URI
없음
MIME 유형
없음
엑스트라
EXTRA_HOUR
알람에서의 시.
EXTRA_MINUTES
알람에서의 분.
EXTRA_MESSAGE
알람 식별을 위한 사용자지정 메시지.
EXTRA_DAYS
이 알람이 반복되어야 하는 각 요일이 포함되어 있는 ArrayList . 각각의 날을 MONDAY 등의 Calendar 클래스로부터 정수로 선언해야 합니다.

1회용 알람에는 이 엑스트라를 지정하지 마세요.

EXTRA_RINGTONE
알람에 사용할 벨소리를 지정하는 content: URI. 벨소리를 사용하지 않으려면 VALUE_RINGTONE_SILENT를 사용합니다.

기본 벨소리를 사용하려면 이 엑스트라를 지정하지 마세요.

EXTRA_VIBRATE
알람을 진동할 것인지의 여부를 지정하는 부울 값.
EXTRA_SKIP_UI
알람 설정시 응답하는 앱이 그 UI를 건너뛸 것인지의 여부를 지정하는 부울 값. 값이 true일 경우 그 앱은 확인 UI를 무시하고 지정된 알람을 설정해야 합니다.

예시 인텐트:

public void createAlarm(String message, int hour, int minutes) {
    Intent intent = new Intent(AlarmClock.ACTION_SET_ALARM)
            .putExtra(AlarmClock.EXTRA_MESSAGE, message)
            .putExtra(AlarmClock.EXTRA_HOUR, hour)
            .putExtra(AlarmClock.EXTRA_MINUTES, minutes);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}
참고:

ACTION_SET_ALARM 인텐트를 호출하기 위해서는 앱이 SET_ALARM 권한을 가지고 있어야 합니다.

<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />

예시 인텐트 필터:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.SET_ALARM" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

타이머 만들기

Google Voice Actions

  • "타이머를 5분으로 맞추세요"

카운트다운 타이머를 만들려면 ACTION_SET_TIMER작업을 사용하고 아래에 정의된 엑스트라를 사용해 기간 등의 타이머 세부정보를 지정합니다.

참고: 이 인텐트는 Android 4.4(API 레벨 19)에서 추가되었습니다.

작업
ACTION_SET_TIMER
데이터 URI
없음
MIME 유형
없음
엑스트라
EXTRA_LENGTH
초 단위의 타이머 길이.
EXTRA_MESSAGE
타이머 식별을 위한 사용자지정 메시지.
EXTRA_SKIP_UI
타이머 설정시 응답하는 앱이 그 UI를 건너뛸 것인지의 여부를 지정하는 부울 값. 값이 true일 경우 그 앱은 확인 UI를 무시하고 지정된 타이머를 시작해야 합니다.

예시 인텐트:

public void startTimer(String message, int seconds) {
    Intent intent = new Intent(AlarmClock.ACTION_SET_TIMER)
            .putExtra(AlarmClock.EXTRA_MESSAGE, message)
            .putExtra(AlarmClock.EXTRA_LENGTH, seconds)
            .putExtra(AlarmClock.EXTRA_SKIP_UI, true);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}
참고:

ACTION_SET_TIMER 인텐트를 호출하기 위해서는 앱이 SET_ALARM 권한을 가지고 있어야 합니다.

<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />

예시 인텐트 필터:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.SET_TIMER" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

알람 모두 보기

알람 목록을 보려면 ACTION_SHOW_ALARMS 작업을 사용합니다.

이 인텐트를 호출할 앱이 많지는 않지만 (이 인텐트는 주로 시스템 앱에서 사용됩니다), 알람 시계 기능이 있는 앱은 모두 이 인텐트 필터를 구현하고 현재의 알람을 표시함으로써 응답해야 합니다.

참고: 이 인텐트는 Android 4.4(API 레벨 19)에서 추가되었습니다.

작업
ACTION_SHOW_ALARMS
데이터 URI
없음
MIME 유형
없음

예시 인텐트 필터:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.SHOW_ALARMS" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

캘린더

캘린더 이벤트 추가

사용자의 캘린터에 새 이벤트를 추가하려면 ACTION_INSERT 작업을 사용하고 Events.CONTENT_URI로 데이터 URI를 지정합니다. 그러면 아래 정의한 엑스트라를 사용해서 다양한 이벤트 명세를 지정할 수 있습니다.

작업
ACTION_INSERT
데이터 URI
Events.CONTENT_URI
MIME 유형
"vnd.android.cursor.dir/event"
엑스트라
EXTRA_EVENT_ALL_DAY
이것이 종일 이벤트인지의 여부를 지정하는 부울 값.
EXTRA_EVENT_BEGIN_TIME
이벤트가 시작되는 시간 (신기원부터의 밀리초).
EXTRA_EVENT_END_TIME
이벤트가 끝나는 시간 (신기원부터의 밀리초).
TITLE
이벤트 제목.
DESCRIPTION
이벤트에 대한 설명
EVENT_LOCATION
이벤트 위치.
EXTRA_EMAIL
초대된 사람들을 명시하는, 콤마로 분리된 이메일 주소 목록.

그밖에 많은 이벤트 정보를 CalendarContract.EventsColumns 클래스에 정의된 상수를 사용해서 지정할 수 있습니다.

예시 인텐트:

public void addEvent(String title, String location, Calendar begin, Calendar end) {
    Intent intent = new Intent(Intent.ACTION_INSERT)
            .setData(Events.CONTENT_URI)
            .putExtra(Events.TITLE, title)
            .putExtra(Events.EVENT_LOCATION, location)
            .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, begin)
            .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, end);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

예시 인텐트 필터:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.INSERT" />
        <data android:mimeType="vnd.android.cursor.dir/event" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

카메라

사진이나 동영상 찍어 반환하기

카메라 앱을 열고 결과물인 사진이나 동영상을 받으려면, ACTION_IMAGE_CAPTURE 또는 ACTION_VIDEO_CAPTURE 작업을 사용합니다. 또한 EXTRA_OUTPUT 엑스트라에서 카메라가 사진이나 동영상를 저장할 URI 위치도 지정합니다.

작업
ACTION_IMAGE_CAPTURE 또는
ACTION_VIDEO_CAPTURE
데이터 URI 구성표
없음
MIME 유형
없음
엑스트라
EXTRA_OUTPUT
카메라 앱이 사진이나 동영상 파일을 (Uri 객체로서) 저장해야 하는 URI 위치.

카메라 앱이 성공적으로 액티비티에 포커스를 돌려주면 (앱이 onActivityResult() 콜백을 받으면), EXTRA_OUTPUT 값으로 지정한 URI에서 사진이나 동영상에 액세스할 수 있습니다.

참고: 사진을 찍기 위해 ACTION_IMAGE_CAPTURE를 사용할 때 카메라가 사진의 축소된 사본(썸네일)을 결과 Intent에 반환할 수 있습니다( "data"라는 이름의 엑스트라 필드에 Bitmap으로 저장).

예시 인텐트:

static final int REQUEST_IMAGE_CAPTURE = 1;
static final Uri mLocationForPhotos;

public void capturePhoto(String targetFilename) {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT,
            Uri.withAppendedPath(mLocationForPhotos, targetFilename));
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        Bitmap thumbnail = data.getParcelable("data");
        // Do other work with full size photo saved in mLocationForPhotos
        ...
    }
}

출력 위치에 대한 적절한 Uri 생성 방법을 포함하여, 이 인텐트를 이용한 사진 촬영에 대한 자세한 정보는 간단하게 사진 촬영이나 간단하게 동영상 촬영을 참조하세요.

예시 인텐트 필터:

<activity ...>
    <intent-filter>
        <action android:name="android.media.action.IMAGE_CAPTURE" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

이 인텐트를 취급할 때, 호출한 액티비티는 들어오는 Intent에서 EXTRA_OUTPUT 엑스트라를 확인한 다음, 이 엑스트라로 지정한 위치에 촬영한 사진이나 동영상을 저장하고, 압축된 썸네일을 "data"라는 엑스트라에 포함하는 IntentsetResult()를 호출해야 합니다.

정지 영상 모드에서 카메라 앱 시작하기

Google Voice Actions

  • "사진을 찍으세요"

카메라를 정지 이미지 모드로 열려면 INTENT_ACTION_STILL_IMAGE_CAMERA 작업을 사용합니다.

작업
INTENT_ACTION_STILL_IMAGE_CAMERA
데이터 URI 구성표
없음
MIME 유형
없음
엑스트라
없음

예시 인텐트:

public void capturePhoto() {
    Intent intent = new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent);
    }
}

예시 인텐트 필터:

<activity ...>
    <intent-filter>
        <action android:name="android.media.action.STILL_IMAGE_CAMERA" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

동영상 모드에서 카메라 앱 시작하기

Google Voice Actions

  • "동영상을 녹화하세요"

카메라 앱을 동영상 모드로 열려면 INTENT_ACTION_VIDEO_CAMERA 작업을 사용합니다.

작업
INTENT_ACTION_VIDEO_CAMERA
데이터 URI 구성표
없음
MIME 유형
없음
엑스트라
없음

예시 인텐트:

public void capturePhoto() {
    Intent intent = new Intent(MediaStore.INTENT_ACTION_VIDEO_CAMERA);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent);
    }
}

예시 인텐트 필터:

<activity ...>
    <intent-filter>
        <action android:name="android.media.action.VIDEO_CAMERA" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

연락처/피플 앱

연락처 선택

사용자가 연락처를 선택하도록 하고 앱에 모든 연락처 정보에 액세스 권한을 주려면, ACTION_PICK 작업을 사용하고 MIME 유형을 Contacts.CONTENT_TYPE로 지정합니다.

onActivityResult() 콜백에 반환된 결과 Intent에는 선택한 연락처를 가리키는 content: URI가 들어 있습니다. 이 응답은 여러분의 앱에 READ_CONTACTS 권한이 포함되어 있지 않더라도 , Contacts Provider API를 사용하여 임시로 해당 연락처를 읽도록 허가합니다 .

팁: 연락처 정보에서 전화번호나 이메일 주소 등 특정 부분에만 액세스할 필요가 있다면, 특정 연락처 데이터 선택에 대해 설명한 다음 섹션을 참조하세요.

작업
ACTION_PICK
데이터 URI 구성표
없음
MIME 유형
Contacts.CONTENT_TYPE

예시 인텐트:

static final int REQUEST_SELECT_CONTACT = 1;

public void selectContact() {
    Intent intent = new Intent(Intent.ACTION_PICK);
    intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, REQUEST_SELECT_CONTACT);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_SELECT_CONTACT && resultCode == RESULT_OK) {
        Uri contactUri = data.getData();
        // Do something with the selected contact at contactUri
        ...
    }
}

연락처 URI를 생성한 후 연락처 세부정보를 검색하는 방법에 대해서는, 연락처 세부 정보 검색을 참조하세요. 위의 인텐트를 사용해서 연락처 URI를 검색할 때는 그 연락처의 세부 정보를 읽기 위한 READ_CONTACTS 권한이 요구되지 않는다는 것을 기억하세요.

특정 연락처 데이터 선택

사용자가 연락처에서 전화번호나 이메일 주소 또는 다른 데이터 유형 등의 특정 정보만 선택할 수 있도록 하려면 ACTION_PICK 작업을 사용하고 MIME 유형으로 아래에 열거된 콘텐츠 유형들 중의 하나를 지정합니다. 예를 들어, 연락처의 전화번호를 구하려면 CommonDataKinds.Phone.CONTENT_TYPE을 지정합니다.

연락처에서 한 가지 유형의 데이터만 검색해야 하는 경우, ContactsContract.CommonDataKinds 클래스의 CONTENT_TYPE을 사용하는 것이 (앞 섹션에서 소개한) Contacts.CONTENT_TYPE을 사용하는 것보다 효과적입니다. 왜냐하면 그 결과가 연락처 제공자에게 복잡한 쿼리를 하지 않고도 원하는 데이터에 액세스할 수 있기 때문입니다.

onActivityResult() 콜백에 반환된 결과 Intent에는 선택한 연락처 데이터를 가리키는 content: URI가 들어 있습니다. 이 응답은 여러분의 앱에 READ_CONTACTS 권한이 포함되어 있지 않더라도 , 임시로 해당 연락처 데이터를 읽도록 허가합니다.

작업
ACTION_PICK
데이터 URI 구성표
없음
MIME 유형
CommonDataKinds.Phone.CONTENT_TYPE
연락처에서 전화번호를 골라냅니다.
CommonDataKinds.Email.CONTENT_TYPE
연락처에서 이메일 주소를 골라냅니다.
CommonDataKinds.StructuredPostal.CONTENT_TYPE
연락처에서 우편 주소를 골라냅니다.

아니면 ContactsContract에서 많은 CONTENT_TYPE 값 중 하나를 골라냅니다.

예시 인텐트:

static final int REQUEST_SELECT_PHONE_NUMBER = 1;

public void selectContact() {
    // Start an activity for the user to pick a phone number from contacts
    Intent intent = new Intent(Intent.ACTION_PICK);
    intent.setType(CommonDataKinds.Phone.CONTENT_TYPE);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, REQUEST_SELECT_PHONE_NUMBER);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_SELECT_PHONE_NUMBER && resultCode == RESULT_OK) {
        // Get the URI and query the content provider for the phone number
        Uri contactUri = data.getData();
        String[] projection = new String[]{CommonDataKinds.Phone.NUMBER};
        Cursor cursor = getContentResolver().query(contactUri, projection,
                null, null, null);
        // If the cursor returned is valid, get the phone number
        if (cursor != null && cursor.moveToFirst()) {
            int numberIndex = cursor.getColumnIndex(CommonDataKinds.Phone.NUMBER);
            String number = cursor.getString(numberIndex);
            // Do something with the phone number
            ...
        }
    }
}

연락처 보기

알고있는 연락처의 세부정보를 표시하려면 ACTION_VIEW 작업을 사용하고, content: URI를 가지고 연락처를 인텐트 데이터로 지정합니다.

연락처 URI를 찾아오는데는 주로 두 가지 방법이 사용됩니다.

  • 앞 섹션에서 소개한 ACTION_PICK이 반환해준 연락처 URI 사용 (이 방법은 앱 권한을 요구하지 않습니다).
  • 연락처 목록 검색에서 설명한 모든 연락처 목록에 액세스 (이 방법에는 READ_CONTACTS 권한이 요구됩니다).
작업
ACTION_VIEW
데이터 URI 구성표
content:<URI>
MIME 유형
없음. 이 유형은 연락처 URI에서 추론됩니다.

예시 인텐트:

public void viewContact(Uri contactUri) {
    Intent intent = new Intent(Intent.ACTION_VIEW, contactUri);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

기존 연락처 편집

알고있는 연락처를 편집하려면 ACTION_EDIT 작업을 사용하고, content: URI가 있는 연락처를 인텐트 데이터로 지정합니다. 그리고 ContactsContract.Intents.Insert의 상수에서 지정한 엑스트라에 알려진 연락처 정보를 포함합니다.

연락처의 URI를 찾아오는데는 주로 두 가지 방법이 사용됩니다.

  • 앞 섹션에서 소개한 ACTION_PICK이 반환해준 연락처 URI 사용 (이 방법은 앱 권한을 요구하지 않습니다).
  • 연락처 목록 검색에서 설명한 모든 연락처 목록에 액세스 (이 방법에는 READ_CONTACTS 권한이 요구됩니다).
작업
ACTION_EDIT
데이터 URI 구성표
content:<URI>
MIME 유형
이 유형은 연락처 URI에서 추론됩니다.
엑스트라
ContactsContract.Intents.Insert 에서 정의한 하나 또는 다수의 엑스트라. 따라서 연락처 정보 필드를 채울 수 있습니다.

예시 인텐트:

public void editContact(Uri contactUri, String email) {
    Intent intent = new Intent(Intent.ACTION_EDIT);
    intent.setData(contactUri);
    intent.putExtra(Intents.Insert.EMAIL, email);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

연락처 편집에 대한 자세한 내용은 인텐트를 이용한 연락처 수정을 참조하세요.

연락처 삽입

새 연락처를 삽입하려면 ACTION_INSERT 작업을 사용하고 MIME 유형으로 Contacts.CONTENT_TYPE를 지정합니다. 그리고 ContactsContract.Intents.Insert의 상수에서 지정한 엑스트라에 알고 있는 연락처 정보를 포함합니다.

작업
ACTION_INSERT
데이터 URI 구성표
없음
MIME 유형
Contacts.CONTENT_TYPE
엑스트라
ContactsContract.Intents.Insert에 정의된 하나 이상의 엑스트라.

예시 인텐트:

public void insertContact(String name, String email) {
    Intent intent = new Intent(Intent.ACTION_INSERT);
    intent.setType(Contacts.CONTENT_TYPE);
    intent.putExtra(Intents.Insert.NAME, name);
    intent.putExtra(Intents.Insert.EMAIL, email);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

연락처 삽입에 대한 자세한 내용은 인텐트를 이용한 연락처 수정을 참조하세요.

이메일

선택적 첨부 파일이 있는 이메일 작성

이메일을 작성하려면 첨부 파일을 포함할 것인지의 여부에 따라 아래 작업 중 하나를 사용하고, 아래에 열거한 추가 키를 사용하여 받는 사람이나 제목 등을 포함합니다.

작업
ACTION_SENDTO (첨부 파일이 없을 경우) 또는
ACTION_SEND (첨부 파일이 1개인 경우) 또는
ACTION_SEND_MULTIPLE (첨부 파일이 여러 개인 경우)
데이터 URI 구성표
없음
MIME 유형
"text/plain"
"*/*"
엑스트라
Intent.EXTRA_EMAIL
모든 "받는 사람" 이메일 주소의 문자열 배열.
Intent.EXTRA_CC
모든 "CC" 수신자 이메일 주소의 문자열 배열.
Intent.EXTRA_BCC
모든 "BCC" 수신자 이메일 주소의 문자열 배열.
Intent.EXTRA_SUBJECT
이메일 제목 문자열.
Intent.EXTRA_TEXT
이메일 본문 문자열.
Intent.EXTRA_STREAM
첨부 파일을 가리키는 Uri. ACTION_SEND_MULTIPLE 작업을 사용하는 경우에는, 이것 대신 다수의 Uri 객체가 포함된 ArrayList를 사용해야 합니다.

예시 인텐트:

public void composeEmail(String[] addresses, String subject, Uri attachment) {
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setType("*/*");
    intent.putExtra(Intent.EXTRA_EMAIL, addresses);
    intent.putExtra(Intent.EXTRA_SUBJECT, subject);
    intent.putExtra(Intent.EXTRA_STREAM, attachment);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

이메일 앱에서만 이 인텐트가 취급되고 다른 문자 메시지나 소셜 앱에서는 처리되지 않도록 하려면 ACTION_SENDTO 작업을 사용하고 "mailto:" 데이터 구성표를 포함합니다. 예:

public void composeEmail(String[] addresses, String subject) {
    Intent intent = new Intent(Intent.ACTION_SENDTO);
    intent.setData(Uri.parse("mailto:")); // only email apps should handle this
    intent.putExtra(Intent.EXTRA_EMAIL, addresses);
    intent.putExtra(Intent.EXTRA_SUBJECT, subject);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

예시 인텐트 필터:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <data android:type="*/*" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.SENDTO" />
        <data android:scheme="mailto" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

파일 저장소

특정 유형의 파일 검색

사용자에게 문서나 사진 등의 파일을 선택하고 여러분의 앱에 그 참조를 돌려달라고 요청하려면 ACTION_GET_CONTENT 작업을 사용하고 원하는 MIME 유형을 지정합니다. 앱에 반환된 파일 참조는 액티비티의 현 수명주기에서 일시적입니다. 그러므로 나중에 액세스하고 싶으면 나중에 읽을 수 있도록 복사해 두어야 합니다. 이는 또한 사용자에게 프로세스에서 파일 새로 만들기를 허용한다는 의미이기도 합니다 ( 예를 들면, 사용자가 기존의 사진을 선택하는 대신 카메라로 사진을 새로 찍을 수 있습니다).

onActivityResult() 메서드에 반환된 결과 인텐트에는 파일을 가리키는 URI가 들어 있습니다. 이 URI는 http: URI, file: URI 또는 content: URI 등 어떤 것이라도 될 수 있습니다. 그러나 선택할 수 있는 파일을 콘텐츠 제공자 (content: URI)에서 액세스할 수 있는 파일들과 openFileDescriptor()을 통해 파일 스트림으로서 이용할 수 있는 파일들만으로 제한하고 싶다면, 인텐트에 CATEGORY_OPENABLE 카테고리를 추가해야 합니다.

Android 4.3 (API 레벨 18)과 그 이상에서, 사용자가 인텐트에 EXTRA_ALLOW_MULTIPLE를 추가하고 true로 설정함으로써 여러 개의 파일을 선택하도록 할 수도 있습니다. 그러면 getClipData()에서 반환한ClipData 객체에서 선택된 각 파일에 액세스할 수 있습니다.

작업
ACTION_GET_CONTENT
데이터 URI 구성표
없음
MIME 유형
사용자가 선택해야 하는, 파일 유형에 해당하는 MIME 유형.
엑스트라
EXTRA_ALLOW_MULTIPLE
사용자가 한 번에 파일을 한 개 이상 선택할 수 있는지의 여부를 선언하는 부울 값.
EXTRA_LOCAL_ONLY
반환된 파일을 원격 서비스에서 다운로드해야 하는 대신 기기에서 직접 열 수 있어야 하는지의 여부를 선언하는 부울 값.
카테고리 (선택)
CATEGORY_OPENABLE
openFileDescriptor()으로 열어 파일 스트림으로 나타낼 수 있는 , "열 수 있는" 파일만 반환합니다.

사진을 가져오는 예시 인텐트:

static final int REQUEST_IMAGE_GET = 1;

public void selectImage() {
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setType("image/*");
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, REQUEST_IMAGE_GET);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_GET && resultCode == RESULT_OK) {
        Bitmap thumbnail = data.getParcelable("data");
        Uri fullPhotoUri = data.getData();
        // Do work with photo saved at fullPhotoUri
        ...
    }
}

사진을 돌려주는 예시 인텐트 필터:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.GET_CONTENT" />
        <data android:type="image/*" />
        <category android:name="android.intent.category.DEFAULT" />
        <!-- The OPENABLE category declares that the returned file is accessible
             from a content provider that supports OpenableColumns
             and ContentResolver.openFileDescriptor() -->
        <category android:name="android.intent.category.OPENABLE" />
    </intent-filter>
</activity>

특정 유형의 파일 열기

ACTION_GET_CONTENT 작업을 통해 앱에 가져와야 하는 파일의 사본을 검색하는 대신, Android 4.4 이상에서는 ACTION_OPEN_DOCUMENT 작업을 사용하고 MIME 유형을 지정함으로써 다른 앱에서 관리하는 파일 열기를 요청할 수 있습니다. 또한 사용자가 앱에서 쓰기가 가능한 새 문서를 만드는 대신 ACTION_CREATE_DOCUMENT 작업을 사용하도록 할 수 있습니다. 예를 들어, 기존의 PDF 문서를 선택하는 대신 ACTION_CREATE_DOCUMENT 인텐트는 사용자가 어디에 새 문서를 만들 것인지 선택하도록 합니다 (문서의 저장소를 관리하는 다른 앱 내에서)—그러면 앱이 새 문서를 작성할 수 있는 URI 위치를 받게 됩니다.

ACTION_GET_CONTENT 작업에서 onActivityResult() 메서드에 돌려준 인텐트는 어떤 유형의 URI라도 반환할 수 있는 반면, ACTION_OPEN_DOCUMENTACTION_CREATE_DOCUMENT의 결과 인텐트는 선택된 파일을 DocumentsProvider가 지원하는 content: URI로서 항상 지정합니다. 그러면 openFileDescriptor()로 파일을 열어 DocumentsContract.Document의 컬럼을 사용해 그 상세 정보를 쿼리할 수 있습니다.

반환된 URI는 앱에 장기적 파일 읽기 권한을 부여합니다 (쓰기 권한도 가능할 수 있음). 따라서 ACTION_OPEN_DOCUMENT 작업은 특히 기존의 파일을 앱에 복사해오지 않고 읽고 싶을 때, 또는 파일을 그 자리에서 열어 편집하고 싶을 때 (ACTION_GET_CONTENT를 사용하는 것보다) 유용합니다.

또한 사용자가 인텐트에 EXTRA_ALLOW_MULTIPLE를 추가하고 true로 설정함으로써 여러 개의 파일을 선택하도록 할 수도 있습니다. 사용자가 항목을 하나만 선택하는 경우에는 getData()에서 해당 항목을 검색할 수 있습니다. 사용자가 항목을 여러 개 선택하는 경우에는 getData()가 null을 반환하므로, 대신 getClipData()에서 반환한 ClipData 객체에서 각 항목을 검색해야 합니다.

참고: 인텐트는 반드시 MIME 유형을 지정해야 하며 반드시 CATEGORY_OPENABLE 카테고리를 선언해야 합니다. 적절할 경우, EXTRA_MIME_TYPES 엑스트라를 사용해서 MIME 유형의 배열을 추가하여 하나 이상의 MIME 유형을 지정할 수 있습니다. 이 방법을 쓸 경우에는 setType()에서 기본 MIME 유형을 "*/*"로 설정해야 합니다.

작업
ACTION_OPEN_DOCUMENT 또는
ACTION_CREATE_DOCUMENT
데이터 URI 구성표
없음
MIME 유형
사용자가 선택해야 하는, 파일 유형에 해당하는 MIME 유형.
엑스트라
EXTRA_MIME_TYPES
앱에서 요구되는 파일 유형에 해당하는 MIME 유형의 배열. 이 엑스트라를 사용할 때는, setType()에서 기본 MIME 유형을 "*/*"로 설정해야 합니다.
EXTRA_ALLOW_MULTIPLE
사용자가 한 번에 파일을 한 개 이상 선택할 수 있는지의 여부를 선언하는 부울 값.
EXTRA_TITLE
최초로 파일 이름을 지정하기 위해 ACTION_CREATE_DOCUMENT와 함께 사용함.
EXTRA_LOCAL_ONLY
반환된 파일을 원격 서비스에서 다운로드해야 하는 대신 기기에서 직접 열 수 있어야 하는지의 여부를 선언하는 부울 값.
카테고리
CATEGORY_OPENABLE
openFileDescriptor()으로 열어 파일 스트림으로 나타낼 수 있는 , "열 수 있는" 파일만 반환합니다.

사진을 가져오는 예시 인텐트:

static final int REQUEST_IMAGE_OPEN = 1;

public void selectImage() {
    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
    intent.setType("image/*");
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    // Only the system receives the ACTION_OPEN_DOCUMENT, so no need to test.
    startActivityForResult(intent, REQUEST_IMAGE_OPEN);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_OPEN && resultCode == RESULT_OK) {
        Uri fullPhotoUri = data.getData();
        // Do work with full size photo saved at fullPhotoUri
        ...
    }
}

제3자 앱은 사실상 ACTION_OPEN_DOCUMENT 작업이 있는 인텐트에 응답할 수 없습니다. 그 대신 시스템이 이 인텐트를 받아 다양한 앱에서 이용할 수 있는 파일들을 모두 통합 사용자 인터페이스에 표시합니다.

이 UI에 앱의 파일을 제공하고 다른 앱들이 열 수 있도록 하려면 DocumentsProvider을 구현하고 PROVIDER_INTERFACE를 위한 인텐트 필터를 포함해야 합니다("android.content.action.DOCUMENTS_PROVIDER"). 예:

<provider ...
    android:grantUriPermissions="true"
    android:exported="true"
    android:permission="android.permission.MANAGE_DOCUMENTS">
    <intent-filter>
        <action android:name="android.content.action.DOCUMENTS_PROVIDER" />
    </intent-filter>
</provider>

여러분의 앱이 관리하는 파일을 다른 앱에서 열수 있도록 하는 방법에 대한 자세한 내용은, 저장소 액세스 프레임워크 가이드를 참조하세요.

로컬 작업

자동차 부르기

Google Voice Actions

  • "택시 좀 불러주세요"
  • "차 좀 불러주세요"

(Android Wear에 한함)

택시를 부르려면 ACTION_RESERVE_TAXI_RESERVATION 작업을 사용합니다.

참고: 앱은 작업을 완료하기 전에 사용자에게 확인을 요청해야 합니다.

작업
ACTION_RESERVE_TAXI_RESERVATION
데이터 URI
없음
MIME 유형
없음
엑스트라
없음

예시 인텐트:

public void callCar() {
    Intent intent = new Intent(ReserveIntents.ACTION_RESERVE_TAXI_RESERVATION);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

예시 인텐트 필터:

<activity ...>
    <intent-filter>
        <action android:name="com.google.android.gms.actions.RESERVE_TAXI_RESERVATION" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

지도

지도상에 위치 표시하기

지도를 열려면 ACTION_VIEW 작업을 사용하고 아래에 정의한 구성표 중 하나로 인텐트 데이터에 위치 정보를 지정합니다.

작업
ACTION_VIEW
데이터 URI 구성표
geo:latitude,longitude
주어진 경도와 위도의 맵을 표시합니다.

예: "geo:47.6,-122.3"

geo:latitude,longitude?z=zoom
주어진 경도와 위도의 맵을 특정 확대/축소 수준에서 표시합니다. 확대/축소 수준 1은 지구 전체를 주어진 lat,lng 중심으로 표시합니다. 가장 높은 (가장 가까운) 확대/축소 수준은 23입니다.

예: "geo:47.6,-122.3?z=11"

geo:0,0?q=lat,lng(label)
주어진 경도와 위도의 맵을 문자열 레이블과 함께 표시합니다.

예: "geo:0,0?q=34.99,-106.61(Treasure)"

geo:0,0?q=my+street+address
"우리 집 주소" 위치를 표시합니다 (특정 주소나 위치 쿼리일 수 있습니다).

예: "geo:0,0?q=1600+Amphitheatre+Parkway%2C+CA"

참고: geo URI에 전달된 문자열은 모두 인코딩해야 합니다. 예를 들면, 문자열 1st & Pike, Seattle1st%20%26%20Pike%2C%20Seattle이 되어야 합니다. 문자열 내의 여백은 %20로 인코딩되거나 더하기 부호 (+)로 대체될 수 있습니다.

MIME 유형
없음

예시 인텐트:

public void showMap(Uri geoLocation) {
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(geoLocation);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

예시 인텐트 필터:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <data android:scheme="geo" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

음악 또는 동영상

미디어 파일 재생

음악 파일을 재생하려면 ACTION_VIEW 작업을 사용하고 파일의 URI 위치를 인텐트 데이터로 지정합니다.

작업
ACTION_VIEW
데이터 URI 구성표
file:<URI>
content:<URI>
http:<URL>
MIME 유형
"audio/*"
"application/ogg"
"application/x-ogg"
"application/itunes"
또는 앱에서 요구하는 다른 유형.

예시 인텐트:

public void playMedia(Uri file) {
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(file);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

예시 인텐트 필터:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <data android:type="audio/*" />
        <data android:type="application/ogg" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

검색 쿼리 기반 음악 재생

Google Voice Actions

  • "마이클 잭슨의 billie jean을 들려주세요"

검색 쿼리를 바탕으로 음악을 재생하려면, INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH 인텐트를 사용합니다. 앱이 사용자의 음성 명령에 응답하여 이 인텐트를 실행하고 음악을 재생할 것입니다. 이 인텐트를 받은 앱은 인벤터리에서 주어진 쿼리와 일치하는 콘텐츠를 검색하여 그 콘텐츠를 재생하기 시작합니다.

이 인텐트에는 원하는 검색 모드를 지정하는 EXTRA_MEDIA_FOCUS 문자열 엑스트라가 포함되어야 합니다. 예를 들어, 검색 모드는 아티스트 이름으로 검색할 것인지 노래 제목으로 검색할 것인지 지정할 수 있습니다.

작업
INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH
데이터 URI 구성표
없음
MIME 유형
없음
엑스트라
MediaStore.EXTRA_MEDIA_FOCUS (필수)

검색 모드를 나타냅니다 (사용자가 특정 아티스트, 앨범, 노래 또는 재생목록 중 무엇을 찾고 있는지). 대부분의 검색 모드는 추가 엑스트라를 취합니다. 예를 들어 사용자가 특정 노래를 듣는데 관심이 있다면 인텐트에 노래 제목, 아티스트 및 앨범, 이 세 가지의 엑스트라가 더 있어야 합니다:. 이 인텐트는 각 EXTRA_MEDIA_FOCUS 값에 대해 다음과 같은 검색 모드를 지원합니다.

무엇이든 - "vnd.android.cursor.item/*"

아무 음악이나 재생합니다. 수신하는 앱은 임의의 선택으로 현명하게, 이를테면 사용자가 마직막으로 들은 재생목록 등의 음악을 재생해야 합니다.

엑스트라:

  • QUERY (필수) - 빈 문자열. 이 엑스트라는 이전 버전과의 호환성을 위해 항상 제공됩니다. 검색 모드에 대해 알지 못하는 기존의 앱들은 이 인텐트를 비구조적 검색으로 처리할 수 있습니다.

비구조적 - "vnd.android.cursor.item/*"

비구조적 검색 쿼리로부터 특정 노래, 앨범 또는 장르를 재생합니다. 앱이 사용자가 듣기 원하는 종류의 콘텐츠를 찾아낼 수 없을 때, 이 검색 모드로 인텐트를 생성할 수 있습니다. 가능하면 앱에서 좀더 구체적인 검색 모드를 사용해야 합니다.

엑스트라:

  • QUERY(필수) - 아티스트, 앨범, 노래 제목, 또는 장르 중 어떤 것들의 조합을 포함하는 문자열입니다.

장르 - Audio.Genres.ENTRY_CONTENT_TYPE

특정 장르의 음악을 재생합니다.

엑스트라:

  • "android.intent.extra.genre" (필수) - 장르.
  • QUERY (필수) - 장르. 하위 호환을 위해 항상 제공되는 엑스트라입니다. 검색 모드에 대해 알지못하는 기존의 앱들은 이 인텐트를 비구조적 검색으로서 처리할 수 있습니다.

아티스트 - Audio.Artists.ENTRY_CONTENT_TYPE

특정 아티스트의의 음악을 재생합니다.

엑스트라:

  • EXTRA_MEDIA_ARTIST (필수) - 아티스트.
  • "android.intent.extra.genre" - 장르.
  • QUERY (필수) - 아티스트나 장르로 이루어진 조합을 포함하는 문자열입니다 하위 호환을 위해 항상 제공되는 엑스트라입니다. 검색 모드에 대해 알지못하는 기존의 앱들은 이 인텐트를 비구조적 검색으로서 처리할 수 있습니다.

앨범 - Audio.Albums.ENTRY_CONTENT_TYPE

특정 앨범의 음악을 재생합니다.

엑스트라:

  • EXTRA_MEDIA_ALBUM (필수) - 앨범.
  • EXTRA_MEDIA_ARTIST - 아티스트.
  • "android.intent.extra.genre" - 장르.
  • QUERY (필수) - 앨범이나 아티스트로 이루어진 조합을 포함하는 문자열입니다 하위 호환을 위해 항상 제공되는 엑스트라입니다. 검색 모드에 대해 알지못하는 기존의 앱들은 이 인텐트를 비구조적 검색으로서 처리할 수 있습니다.

노래 - "vnd.android.cursor.item/audio"

특정 노래를 재생합니다.

엑스트라:

  • EXTRA_MEDIA_ALBUM - 앨범.
  • EXTRA_MEDIA_ARTIST - 아티스트.
  • "android.intent.extra.genre" - 장르.
  • EXTRA_MEDIA_TITLE (필수) - 노래 제목.
  • QUERY (필수) - 앨범, 아티스트, 장르, 또는 제목 중 어떤 것들의 조합을 포함하는 문자열입니다. 하위 호환을 위해 항상 제공되는 엑스트라입니다. 검색 모드에 대해 알지못하는 기존의 앱들은 이 인텐트를 비구조적 검색으로서 처리할 수 있습니다.

재생목록 - Audio.Playlists.ENTRY_CONTENT_TYPE

특정 재생목록이나 추가 엑스트라에서 지정한 일부 기준에 부합하는 재생목록을 재생합니다.

엑스트라:

  • EXTRA_MEDIA_ALBUM - 앨범.
  • EXTRA_MEDIA_ARTIST - 아티스트.
  • "android.intent.extra.genre" - 장르.
  • "android.intent.extra.playlist" - 재생목록.
  • EXTRA_MEDIA_TITLE - 재생목록이 기초로 삼는 노래 제목.
  • QUERY (필수) - 앨범, 아티스트, 장르, 또는 재생목록 중 어떤 것들의 조합을 포함하는 문자열입니다. 이 엑스트라는 이전 버전과의 호환성을 위해 항상 제공됩니다. 검색 모드에 대해 알지 못하는 기존의 앱들은 이 인텐트를 비구조적 검색으로 처리할 수 있습니다.

예시 인텐트:

사용자가 특정 아티스트의 노래를 듣기 원할 경우, 검색 앱이 다음 인텐트를 생성할 수 있습니다.

public void playSearchArtist(String artist) {
    Intent intent = new Intent(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH);
    intent.putExtra(MediaStore.EXTRA_MEDIA_FOCUS,
                    MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE);
    intent.putExtra(MediaStore.EXTRA_MEDIA_ARTIST, artist);
    intent.putExtra(SearchManager.QUERY, artist);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

예시 인텐트 필터:

<activity ...>
    <intent-filter>
        <action android:name="android.media.action.MEDIA_PLAY_FROM_SEARCH" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

이 인텐트를 처리할 때 호출한 액티비티는 들어오는 Intent에서 EXTRA_MEDIA_FOCUS 엑스트라의 값을 확인하여 검색 모드를 결정해야 합니다. 액티비티는 검색 모드를 확인하고 나서 그 특정 검색 모드에 대한 추가 엑스트라의 값을 읽어야 합니다. 그러면 앱이 이 정보를 사용해 인벤토리 내부에서 검색을 수행하여 검색 쿼리와 일치하는 콘텐츠를 재생할 수 있습니다. 예:

protected void onCreate(Bundle savedInstanceState) {
    ...
    Intent intent = this.getIntent();
    if (intent.getAction().compareTo(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH) == 0) {

        String mediaFocus = intent.getStringExtra(MediaStore.EXTRA_MEDIA_FOCUS);
        String query = intent.getStringExtra(SearchManager.QUERY);

        // Some of these extras may not be available depending on the search mode
        String album = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ALBUM);
        String artist = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ARTIST);
        String genre = intent.getStringExtra("android.intent.extra.genre");
        String playlist = intent.getStringExtra("android.intent.extra.playlist");
        String title = intent.getStringExtra(MediaStore.EXTRA_MEDIA_TITLE);

        // Determine the search mode and use the corresponding extras
        if (mediaFocus == null) {
            // 'Unstructured' search mode (backward compatible)
            playUnstructuredSearch(query);

        } else if (mediaFocus.compareTo("vnd.android.cursor.item/*") == 0) {
            if (query.isEmpty()) {
                // 'Any' search mode
                playResumeLastPlaylist();
            } else {
                // 'Unstructured' search mode
                playUnstructuredSearch(query);
            }

        } else if (mediaFocus.compareTo(MediaStore.Audio.Genres.ENTRY_CONTENT_TYPE) == 0) {
            // 'Genre' search mode
            playGenre(genre);

        } else if (mediaFocus.compareTo(MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE) == 0) {
            // 'Artist' search mode
            playArtist(artist, genre);

        } else if (mediaFocus.compareTo(MediaStore.Audio.Albums.ENTRY_CONTENT_TYPE) == 0) {
            // 'Album' search mode
            playAlbum(album, artist);

        } else if (mediaFocus.compareTo("vnd.android.cursor.item/audio") == 0) {
            // 'Song' search mode
            playSong(album, artist, genre, title);

        } else if (mediaFocus.compareTo(MediaStore.Audio.Playlists.ENTRY_CONTENT_TYPE) == 0) {
            // 'Playlist' search mode
            playPlaylist(album, artist, genre, playlist, title);
        }
    }
}

새 노트

노트 만들기

새 노트를 만들려면 ACTION_CREATE_NOTE 작업을 사용하고, 아래 정의된 엑스트라를 사용하여 노트 세부정보(예: 제목, 텍스트 등)를 지정합니다.

참고: 앱은 작업을 완료하기 전에 사용자에게 확인을 요청해야 합니다.

작업
ACTION_CREATE_NOTE
데이터 URI 구성표
없음
MIME 유형
PLAIN_TEXT_TYPE
"*/*"
엑스트라
EXTRA_NAME
노트의 제목이나 주제를 나타내는 문자열.
EXTRA_TEXT
노트의 텍스트를 나타내는 문자열.

예시 인텐트:

public void createNote(String subject, String text) {
    Intent intent = new Intent(NoteIntents.ACTION_CREATE_NOTE)
            .putExtra(NoteIntents.EXTRA_NAME, subject)
            .putExtra(NoteIntents.EXTRA_TEXT, text);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

예시 인텐트 필터:

<activity ...>
    <intent-filter>
        <action android:name="com.google.android.gms.actions.CREATE_NOTE" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType=”*/*”>
    </intent-filter>
</activity>

전화

전화 걸기

전화 앱을 열어 번호를 누르려면, ACTION_DIAL 작업을 사용하고, 아래에 정의한 URI 구성표를 사용해 전화번호를 지정합니다. 전화 앱을 열면 전화번호가 표시되지만 사용자가 Call 버튼을 눌러야 통화를 시작할 수 있습니다.

Google Voice Actions

  • "555-5555로 전화하세요"
  • "Bob에게 전화하세요"
  • "음성사서함에 전화하세요"

직접 전화를 걸려면 ACTION_CALL 작업을 사용하고 아래에 정의한 URI 구성표를 사용해 전화번호를 지정합니다. 전화 앱을 열면 앱이 전화를 걸기 시작합니다. 사용자는 Call 버튼을 누르지 않아도 됩니다.

ACTION_CALL 작업은 매니페스트 파일에 CALL_PHONE 권한을 추가할 것을 요구합니다.

<uses-permission android:name="android.permission.CALL_PHONE" />
작업
  • ACTION_DIAL - 다이얼러나 전화 앱을 엽니다.
  • ACTION_CALL - 전화 걸기 ( CALL_PHONE 권한 필요)
데이터 URI 구성표
  • tel:<phone-number>
  • voicemail:<phone-number>
MIME 유형
없음

유효한 전화 번호는 IETF RFC 3966에 정의되어 있는 것들입니다. 다음은 유효 전화 번호의 예입니다.

  • tel:2125551212
  • tel:(212) 555 1212

전화기의 다이얼은 전화 번호 등 구성표를 정규화하는데 적합합니다. 따라서 설명드린 구성표는 Uri.parse() 메서드에서 엄격히 요구되는 것이 아닙니다. 그러나 구성표를 시도해보지 않았거나 그것을 처리할 수 있을지 확신이 서지 않는다면 Uri.fromParts() 메서드를 대신 사용하세요.

예시 인텐트:

public void dialPhoneNumber(String phoneNumber) {
    Intent intent = new Intent(Intent.ACTION_DIAL);
    intent.setData(Uri.parse("tel:" + phoneNumber));
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

특정 앱을 사용한 검색

Google Voice Actions

  • "myvideoapp에서 고양이 동영상을 검색하세요"

동영상

앱에서 음성 검색

앱 컨텍스트 내에 검색을 지원하려면 아래의 예시 인텐트 필터에 나오는 것처럼 SEARCH_ACTION 작업으로 앱에서 인텐트 필터를 선언합니다.

작업
"com.google.android.gms.actions.SEARCH_ACTION"
Google Voice Actions에서의 검색 쿼리를 지원합니다.
엑스트라
QUERY
검색 쿼리를 포함하고 있는 문자열.

예시 인텐트 필터:

<activity android:name=".SearchActivity">
    <intent-filter>
        <action android:name="com.google.android.gms.actions.SEARCH_ACTION"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>

웹 검색하기

웹 검색을 시작하려면 ACTION_WEB_SEARCH 작업을 사용하고 SearchManager.QUERY 엑스트라에서 검색 문자열을 지정합니다.

작업
ACTION_WEB_SEARCH
데이터 URI 구성표
없음
MIME 유형
없음
엑스트라
SearchManager.QUERY
검색 문자열

예시 인텐트:

public void searchWeb(String query) {
    Intent intent = new Intent(Intent.ACTION_SEARCH);
    intent.putExtra(SearchManager.QUERY, query);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

설정

설정의 특정 부분 열기

앱이 사용자에게 무엇인가 변경할 것을 요구할 때 시스템 설정에서 화면을 열려면 다음 인텐트 작업들 중 한 가지를 사용해서 작업의 이름에 대한 설정 화면을 엽니다.

작업
ACTION_SETTINGS
ACTION_WIRELESS_SETTINGS
ACTION_AIRPLANE_MODE_SETTINGS
ACTION_WIFI_SETTINGS
ACTION_APN_SETTINGS
ACTION_BLUETOOTH_SETTINGS
ACTION_DATE_SETTINGS
ACTION_LOCALE_SETTINGS
ACTION_INPUT_METHOD_SETTINGS
ACTION_DISPLAY_SETTINGS
ACTION_SECURITY_SETTINGS
ACTION_LOCATION_SOURCE_SETTINGS
ACTION_INTERNAL_STORAGE_SETTINGS
ACTION_MEMORY_CARD_SETTINGS

그밖에 이용할 수 있는 설정 화면은 Settings 문서를 참조하세요.

데이터 URI 구성표
없음
MIME 유형
없음

예시 인텐트:

public void openWifiSettings() {
    Intent intent = new Intent(Intent.ACTION_WIFI_SETTINGS);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

문자 메시지

첨부 파일이 있는 SMS/MMS 메시지 작성

SMS나 MMS 문자 메시지를 시작하려면 아래의 인텐트 작업 중 하나를 사용하고 아래 나오는 엑스트라 키를 사용해 전화 번호, 제목, 메시지 본문 등의 메시지 세부정보를 지정합니다.

작업
ACTION_SENDTO 또는
ACTION_SEND 또는
ACTION_SEND_MULTIPLE
데이터 URI 구성표
sms:<phone_number>
smsto:<phone_number>
mms:<phone_number>
mmsto:<phone_number>

이러한 각 구성표는 동일하게 취급됩니다.

MIME 유형
"text/plain"
"image/*"
"video/*"
엑스트라
"subject"
메시지 제목 문자열 (대개 MMS에 한함).
"sms_body"
문자 메시지 문자열.
EXTRA_STREAM
첨부할 이미지나 동영상을 가리키는 Uri . ACTION_SEND_MULTIPLE 작업을 사용하는 경우에는, 이 엑스트라는 첨부할 이미지/동영상을 가리키는 UriArrayList여야 합니다.

예시 인텐트:

public void composeMmsMessage(String message, Uri attachment) {
    Intent intent = new Intent(Intent.ACTION_SENDTO);
    intent.setType(HTTP.PLAIN_TEXT_TYPE);
    intent.putExtra("sms_body", message);
    intent.putExtra(Intent.EXTRA_STREAM, attachment);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

이 인텐트가 문자 메시지 앱에서만 취급되고 다른 이메일 앱나 소셜 앱에서는 처리되지 않도록 하려면 ACTION_SENDTO 작업을 사용하고 "smsto:" 데이터 구성표를 포함합니다. 예:

public void composeMmsMessage(String message, Uri attachment) {
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setData(Uri.parse("smsto:"));  // This ensures only SMS apps respond
    intent.putExtra("sms_body", message);
    intent.putExtra(Intent.EXTRA_STREAM, attachment);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

예시 인텐트 필터:

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

참고: SMS/MMS 메시지 앱을 개발하는 중이라면, Android 4.4 이상에서 기본 SMS 앱으로 이용할 수 있도록 하기 위해서는 여러가지 추가 작업에 대해 인텐트 필터를 구현해야 합니다. 자세한 내용은 Telephony의 문서를 참조하세요.

웹 브라우저

웹 URL 로드

Google Voice Actions

  • "example.com을 여세요"

웹페이지를 열려면 ACTION_VIEW 작업을 사용하고 인텐트 데이터에서 웹 URL을 지정합니다.

작업
ACTION_VIEW
데이터 URI 구성표
http:<URL>
https:<URL>
MIME 유형
"text/plain"
"text/html"
"application/xhtml+xml"
"application/vnd.wap.xhtml+xml"

예시 인텐트:

public void openWebPage(String url) {
    Uri webpage = Uri.parse(url);
    Intent intent = new Intent(Intent.ACTION_VIEW, webpage);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

예시 인텐트 필터:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <!-- Include the host attribute if you want your app to respond
             only to URLs with your app's domain. -->
        <data android:scheme="http" android:host="www.example.com" />
        <category android:name="android.intent.category.DEFAULT" />
        <!-- The BROWSABLE category is required to get links from web pages. -->
        <category android:name="android.intent.category.BROWSABLE" />
    </intent-filter>
</activity>

팁: Android 앱이 여러분의 웹사이트와 비슷한 기능을 제공한다면, 해당 웹사이트를 가리키는 URL에 대한 인텐트 필터를 포함하세요. 그러면 사용자가 여러분의 앱을 설치한 경우, 이메일이나 여러분의 웹사이트를 가리키는 다른 웹 페이지의 링크가 여러분의 웹 페이지가 아니라 Android 앱에서 열립니다.

Android 디버그 브리지로 인텐트 확인

앱이 여러분이 지원하려는 인텐트에 응답하는지 확인하려면 adb 도구를 사용하여 특정 인텐트를 내보낼 수 있습니다.

  1. Android 기기를 개발용으로 설정하거나, 가상 기기를 사용하세요.
  2. 지원하고자 하는 인텐트를 처리하는 앱 버전을 설치하세요.
  3. adb를 사용하여 인텐트를 내보냅니다.
    adb shell am start -a <ACTION> -t <MIME_TYPE> -d <DATA> \
      -e <EXTRA_NAME> <EXTRA_VALUE> -n <ACTIVITY>
    

    예:

    adb shell am start -a android.intent.action.DIAL \
      -d tel:555-5555 -n org.example.MyApp/.MyActivity
    
  4. 필요한 인텐트 필터를 정의했다면 앱이 인텐트를 처리해야 합니다.

자세한 내용은 ADB 셸 명령어를 참조하세요.