一般的なインテント

インテントを使用すると、実行する簡単なアクション(「地図を表示する」、「写真を撮る」など)を Intent オブジェクトに記述することによって別のアプリのアクティビティを開始できます。 このタイプのインテントでは、開始するアプリのコンポーネントは指定されません。アクションとアクションの実行に使用するデータのみが指定されるため、暗黙的インテントと呼ばれます。

startActivity()startActivityForResult() を呼び出して暗黙的インテントを渡すと、システムはインテントを扱うことができるアプリを判断するためにインテントの解決を行い、対応する Activity を起動します。 インテントを扱うことができるアプリが複数存在する場合は、ユーザーが使用するアプリを選択できるダイアログが表示されます。

このページでは、インテントを扱うことができるアプリのタイプ別に、一般的なアクションを実行できる暗黙的インテントについて説明します。 各セクションには、アプリがそのアクションを実行できることを通知するインテント フィルタの作成方法も記載されています。

警告: デバイスに暗黙的インテントを受け取ることができるアプリがない場合、startActivity() を呼び出すとアプリがクラッシュします。 まず、インテントを受け取るアプリの存在を確認するために、Intent オブジェクトの resolveActivity() を呼び出すようにしてください。 結果が null 以外の場合は、インテントを処理できるアプリが少なくとも 1 つあることを意味し、startActivity() を安全に呼び出すことができます。 結果が null の場合は、そのインテントは使用せず、可能であればそのインテントを発行する機能を無効にする必要があります。

インテントやインテント フィルタの作成方法を十分理解していない場合は、まずインテントとインテント フィルタをお読みください。

このページに記載されているインテントを開発用のホストから発行する方法については、Android Debug Bridge でインテントを検証するを参照してください。

Google Voice Actions

このページに記載されているインテントの中には、Google Voice Actions により、音声コマンドへの応答として発行されるものもあります。 詳細については、Google Voice Actions から発行されるインテントをご覧ください。

アラーム クロック

アラームを作成する

Google Voice Actions

  • "set an alarm for 7 am"

新しいアラームを作成するには、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

  • "set timer for 5 minutes"

カウントダウン タイマーを作成するには、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>

このインテントを処理するアクティビティを作成する場合は、受け取った IntentEXTRA_OUTPUT エクストラ値を確認し、撮影した画像やビデオをエクストラ値で指定された場所に保存し、追加フィールド "data" に縮小版のサムネイルを含む Intent を指定して setResult() を呼び出す必要があります。

静止画モードでカメラアプリを起動する

Google Voice Actions

  • "take a picture"

静止画モードでカメラアプリを起動するには、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

  • "record a video"

ビデオモードでカメラアプリを起動するには、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 を指定します。

結果の Intent は、onActivityResult() コールバックで渡されます。このコールバックには、選択された連絡先を指す 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 を指定します。

以前のセクションでも示されているとおり、連絡先から 1 つのデータのみを取得する場合は、この方式で ContactsContract.CommonDataKinds クラスの CONTENT_TYPE を利用する方が Contacts.CONTENT_TYPE を利用するよりも効率的です。この方式では、連絡先プロバイダに複雑なクエリを行わずに目的のデータに直接アクセスできます。

結果の Intent は、onActivityResult() コールバックで渡されます。このコールバックには、選択された連絡先データを指す 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 を取得する必要がありますが、これには主に 2 つの方法があります。

  • 前のセクションで説明した 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 を取得する必要がありますが、これには主に 2 つの方法があります。

  • 前のセクションで説明した ACTION_PICK によって返される連絡先 URI を使用します(この方法では、アプリにパーミッションは不要です)。
  • 連絡先の一覧の取得で説明されている方法を利用して連絡先のリストに直接アクセスします(この方法には、READ_CONTACTS パーミッションが必要です)。
アクション
ACTION_EDIT
データ URI スキーム
content:<URI>
MIME タイプ
タイプは連絡先 URI から推測します。
エクストラ
ContactsContract.Intents.Insert で定義されているエクストラ値を用いて、連絡先詳細に設定するフィールドを 1 つまたは複数指定します。

インテントの例

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 で定義されているエクストラ値を 1 つまたは複数指定します。

インテントの例

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>

特定のタイプのファイルを開く

Android 4.4 以降を実行している場合は、ACTION_GET_CONTENT アクションでファイルのコピーを取得してアプリにインポートする代わりに、別のアプリが管理しているファイルを開くことができます。この操作を行うには、ACTION_OPEN_DOCUMENT アクションを使用して MIME タイプを指定します。ユーザーが新しいファイルを作成することもできるようにするには、ACTION_CREATE_DOCUMENT アクションを使用します。新しいファイルにはアプリが書き込みを行うことができます。 たとえば、ACTION_CREATE_DOCUMENT インテントを使用すると、ユーザーは既存の PDF ドキュメントを選択する代わりに新しいドキュメントを作成する場所(ドキュメントのストレージを管理する別のアプリ内の場所)を選択することができます。その場合、書き込み可能な新しいドキュメントの場所を示す URI がアプリに返されます。

ACTION_GET_CONTENT アクションが onActivityResult() メソッドに返すインテントは任意のタイプの URI を返しますが、ACTION_OPEN_DOCUMENTACTION_CREATE_DOCUMENT の結果のインテントでは、選択したファイルは常に DocumentsProvider がサポートする content: URI になります。 このファイルは openFileDescriptor() で開いたり、DocumentsContract.Document のカラムを使用して詳細情報を取得したりすることができます。

URI が返されるのと同時に、ファイルへの長期的な読み取りアクセス権限がアプリに付与されます(書き込みアクセス権限も付与される場合があります)。 そのため、アプリ内にコピーを作成せずに既存のファイルを読み取りたい場合や、ファイルをその場で開いて編集したい場合は、ACTION_GET_CONTENT アクションの代わりに ACTION_OPEN_DOCUMENT アクションを利用すると特に便利です。

インテントに EXTRA_ALLOW_MULTIPLE を追加して true に設定すると、ユーザーが複数のファイルを選択できます。ユーザーが 1 つの項目のみを選択した場合は、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
        ...
    }
}

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

  • "get me a taxi"
  • "call me a car"

(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 では、指定された経度と緯度を中心として地球全体を表示します。 最大(もっとも拡大率の高い)ズームレベルは 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
「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

  • "play michael jackson billie jean"

検索クエリから音楽を再生するには、INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH インテントを使用します。 アプリは、音楽を再生するユーザーの音声コマンドへの応答としてこのインテントを呼び出すことができます。 このインテントを受信したアプリは、指定されたクエリに該当する既存のコンテンツを検索し、再生を開始します。

このインテントには、検索モードを指定する EXTRA_MEDIA_FOCUS エクストラ値を文字列で含める必要があります。 たとえば、検索モードでは、アーティスト名で検索するか、曲名で検索するかを指定できます。

アクション
INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH
データ URI スキーム
なし
MIME タイプ
なし
エクストラ
MediaStore.EXTRA_MEDIA_FOCUS(必須)

検索モード(アーティスト、アルバム、曲、プレイリストのいずれで検索するか)を指定します。 ほとんどの検索モードでは、追加のエクストラ値が必要になります。たとえば、ユーザーが特定の曲を聴きたい場合、曲名、アーティスト、アルバムという 3 つのエクストラ値がインテントに指定される可能性があります。 このインテントは、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>

このインテントを処理するアクティビティを作成する場合は、受け取った IntentEXTRA_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 スキームで電話番号を指定します。 電話アプリが開くと電話番号が表示されますが、ユーザーは通話ボタンを押して呼び出しを行う必要があります。

Google Voice Actions

  • "call 555-5555"
  • "call bob"
  • "call voicemail"

直接電話をかけるには、ACTION_CALL アクションを使用して以下に定義されている URI スキームで電話番号を指定します。 電話アプリが開くと呼び出しが始まります。ユーザーが通話ボタンを押す必要はありません。

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

  • "search for cat videos on 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

  • "open 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 Debug Bridge でインテントを検証する

サポートしたいインテントにアプリが応答することを検証するには、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 shell コマンドをご覧ください。