一般的なインテント

インテントを使用すると、別のアプリでアクティビティを開始するために、 ユーザーが希望するアクション(「地図を表示する」など)または できます。Intent オブジェクトで指定する必要があります。このタイプのインテント 暗黙的インテントと呼ばれます。これは、アプリを指定しないためです。 代わりに action を指定し、 アクションの実行に使用するデータ

startActivity() に発信したとき または startActivityForResult() を使用して暗黙的インテントを渡します。 解決 そのインテントをそのインテントを処理できるアプリに渡して、 対応する Activity。インテントを処理できるアプリが複数ある場合、ユーザーが使用するアプリを選択できるダイアログが表示されます。

このページでは、実行するために使用できる暗黙的インテントについて説明します。 インテントを処理するアプリのタイプ別に整理された一般的なアクション。各 セクションに、インテントの作成方法も示しています。 フィルタを使用して、アプリのアクション実行機能をアドバタイズできます。

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

インテントやインテント フィルタの作成方法がわからない場合は、まずインテントとインテント フィルタ

このページに記載されているインテントを開発から呼び出す方法を学ぶ 詳しくは、Android Debug でインテントを検証する ブリッジ セクションがあります。

Google 音声操作

Google Voice Actions は、音声コマンドへの応答として、このページに記載されているインテントの一部を呼び出します。詳細については、<ph type="x-smartling-placeholder"></ph>をご覧ください。 システム音声操作を使ってみる

目覚まし時計

必要な情報を含む、目覚まし時計アプリの一般的なアクションは次のとおりです を作成することで、アプリの各アクションの実行機能をアドバタイズできます。

アラームを作成

Google 音声操作

  • 「アラームを午前 7 時に設定して」

新しいアラームを作成するには、ACTION_SET_ALARMを使用します アクションを実行し、以下のエクストラを使用して時刻やメッセージなどのアラームの詳細を指定します。

注: 時間、分、メッセージ エクストラのみ利用できます。 Android 2.3(API レベル 9)以前で利用できます。その他のエクストラは、 説明します。

操作
ACTION_SET_ALARM
データ URI
なし
MIME タイプ
なし
エクストラ
EXTRA_HOUR
アラームの時刻。
EXTRA_MINUTES
アラームの分。
EXTRA_MESSAGE
アラームを識別するカスタム メッセージ。
EXTRA_DAYS
ArrayList(このアラームが動作する各曜日を含む) 繰り返します。各日付は Calendar の整数で宣言する必要があります クラス(MONDAY など)。

1 回限りのアラームの場合は、このエクストラを指定しないでください。

EXTRA_RINGTONE
アラームで使用する着信音を指定する content: URI。着信音がない場合は VALUE_RINGTONE_SILENT

デフォルトの着信音を使用する場合は、このエクストラを指定しないでください。

EXTRA_VIBRATE
このアラームでバイブレーションを使用するかどうかを指定するブール値。
EXTRA_SKIP_UI
アラームを設定するときに、応答側のアプリが UI をスキップする必要があるかどうかを指定するブール値。 true の場合、アプリは確認 UI をバイパスして、指定されたアラームを設定する必要があります。

インテントの例:

Kotlin

fun createAlarm(message: String, hour: Int, minutes: Int) {
    val intent = Intent(AlarmClock.ACTION_SET_ALARM).apply {
        putExtra(AlarmClock.EXTRA_MESSAGE, message)
        putExtra(AlarmClock.EXTRA_HOUR, hour)
        putExtra(AlarmClock.EXTRA_MINUTES, minutes)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

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 音声操作

  • 「タイマーを 5 分に設定して」

カウントダウン タイマーを作成するには、ACTION_SET_TIMER アクションを使用し、以下のエクストラを使用して時間などのタイマーの詳細を指定します。

注: このインテントは、Cloud Functions の Android 4.4(API レベル 19)以降が必要です。

操作
ACTION_SET_TIMER
データ URI
なし
MIME タイプ
なし
エクストラ
EXTRA_LENGTH
タイマーの長さ(秒単位)。
EXTRA_MESSAGE
タイマーを識別するカスタム メッセージです。
EXTRA_SKIP_UI
タイマーを設定する際にアプリが UI をスキップする必要があるかどうかを示すブール値です。 true の場合、アプリは確認画面の UI をすべてスキップして指定されたタイマーを開始する必要があります。

インテントの例:

Kotlin

fun startTimer(message: String, seconds: Int) {
    val intent = Intent(AlarmClock.ACTION_SET_TIMER).apply {
        putExtra(AlarmClock.EXTRA_MESSAGE, message)
        putExtra(AlarmClock.EXTRA_LENGTH, seconds)
        putExtra(AlarmClock.EXTRA_SKIP_UI, true)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

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を使用します できます。

このインテントを呼び出すアプリは多くありませんが、このインテントは主にシステムアプリで使用されますが、 目覚まし時計として機能するアプリには 現在のアラームのリストを表示して応答します。

注: このインテントは、Cloud Functions の 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 データ URI を Events.CONTENT_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 クラス。

インテントの例:

Kotlin

fun addEvent(title: String, location: String, begin: Long, end: Long) {
    val intent = Intent(Intent.ACTION_INSERT).apply {
        data = 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(packageManager) != null) {
        startActivity(intent)
    }
}

Java

public void addEvent(String title, String location, long begin, long 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 にある写真の縮小コピーまたはサムネイル。名前の追加フィールドに Bitmap として保存される "data"

例のインテント:

Kotlin

const val REQUEST_IMAGE_CAPTURE = 1
val locationForPhotos: Uri = ...

fun capturePhoto(targetFilename: String) {
    val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE).apply {
        putExtra(MediaStore.EXTRA_OUTPUT, Uri.withAppendedPath(locationForPhotos, targetFilename))
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivityForResult(intent, REQUEST_IMAGE_CAPTURE)
    }
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK) {
        val thumbnail: Bitmap = data.getParcelableExtra("data")
        // Do other work with full size photo saved in locationForPhotos.
        ...
    }
}

Java

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

public void capturePhoto(String targetFilename) {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT,
            Uri.withAppendedPath(locationForPhotos, 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.getParcelableExtra("data");
        // Do other work with full size photo saved in locationForPhotos.
        ...
    }
}

Android 12(API レベル 31)以降で動作する場合にこの操作を行うには、次のインテントの例を参照してください。

インテントの例:

Kotlin

val REQUEST_IMAGE_CAPTURE = 1

private fun dispatchTakePictureIntent() {
    val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
    try {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE)
    } catch (e: ActivityNotFoundException) {
        // Display error state to the user.
    }
}

Java

static final int REQUEST_IMAGE_CAPTURE = 1;

private void dispatchTakePictureIntent() {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    try {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    } catch (ActivityNotFoundException e) {
        // Display error state to the user.
    }
}
</section></div>

出力場所に適切な Uri を作成する方法など、このインテントを使って写真を撮影する方法の詳細については、写真を撮影するまたは動画を撮影するをご覧ください。

インテント フィルタの例:

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

このインテントを処理する際、受け取った IntentEXTRA_OUTPUT エクストラをアクティビティで確認してから、キャプチャした画像や動画を エクストラで指定された位置を確認し、圧縮されたサムネイルを含む IntentsetResult() を呼び出します。 名前は「"data"」です。

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

Google 音声操作

  • 「写真を撮って」

カメラアプリを静止画像モードで起動するには、INTENT_ACTION_STILL_IMAGE_CAMERA アクションを使用します。

操作
INTENT_ACTION_STILL_IMAGE_CAMERA
データ URI スキーム
なし
MIME タイプ
なし
エクストラ
なし

例のインテント:

Kotlin

private fun dispatchTakePictureIntent() {
    val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
    try {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE)
    } catch (e: ActivityNotFoundException) {
        // Display error state to the user.
    }
}

Java

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

インテント フィルタの例:

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

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

Google 音声操作

  • 「動画を撮影して」

カメラアプリを動画モードで開くには、INTENT_ACTION_VIDEO_CAMERA アクションを使用します。

操作
INTENT_ACTION_VIDEO_CAMERA
データ URI スキーム
なし
MIME タイプ
なし
エクストラ
なし

例のインテント:

Kotlin

fun capturePhoto() {
    val intent = Intent(MediaStore.INTENT_ACTION_VIDEO_CAMERA)
    if (intent.resolveActivity(packageManager) != null) {
        startActivityForResult(intent, REQUEST_IMAGE_CAPTURE)
    }
}

Java

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

インテント フィルタの例:

<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。レスポンスで Contacts Provider API を使用してその連絡先を読み取ることが アプリに READ_CONTACTS 権限が含まれていません。

ヒント: 特定の連絡先にのみアクセスする必要がある場合 電話番号やメールアドレスなどの情報が必要な場合は、次のセクションで 特定の連絡先データを選択する

操作
ACTION_PICK
データ URI スキーム
なし
MIME タイプ
Contacts.CONTENT_TYPE

インテントの例:

Kotlin

const val REQUEST_SELECT_CONTACT = 1

fun selectContact() {
    val intent = Intent(Intent.ACTION_PICK).apply {
        type = ContactsContract.Contacts.CONTENT_TYPE
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivityForResult(intent, REQUEST_SELECT_CONTACT)
    }
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    if (requestCode == REQUEST_SELECT_CONTACT && resultCode == RESULT_OK) {
        val contactUri: Uri = data.data
        // Do something with the selected contact at contactUri.
        //...
    }
}

Java

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 を取得する場合、通常は CANNOT TRANSLATE READ_CONTACTS その連絡先の基本情報(表示名、 連絡先がスター付きかどうか。ただし、 特定の連絡先に関するより詳細なデータの読み取り(例: 使用する場合は、READ_CONTACTS が必要です。 付与します。

特定の連絡先データを選択する

ユーザーが連絡先から特定の情報(電話番号、メールアドレス、その他のデータ型など)を選択できるようにするには、ACTION_PICK アクションを使用して、MIME タイプを次のいずれかのコンテンツ タイプに指定します。たとえば、連絡先の電話番号を取得するには CommonDataKinds.Phone.CONTENT_TYPE を指定します。

注: 多くの場合、アプリには READ_CONTACTS 特定の連絡先に関する特定の情報を表示する権限。

連絡先から 1 種類のデータのみを取得する必要がある場合は、この方法で 次の場所から CONTENT_TYPE: ContactsContract.CommonDataKinds クラスは、 前のセクションで説明したように、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
住所が含まれている連絡先から選択します。

または他の多数の CONTENT_TYPE 値のいずれか 1 つ ContactsContract 未満。

インテントの例:

Kotlin

const val REQUEST_SELECT_PHONE_NUMBER = 1

fun selectContact() {
    // Start an activity for the user to pick a phone number from contacts.
    val intent = Intent(Intent.ACTION_PICK).apply {
        type = CommonDataKinds.Phone.CONTENT_TYPE
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivityForResult(intent, REQUEST_SELECT_PHONE_NUMBER)
    }
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    if (requestCode == REQUEST_SELECT_PHONE_NUMBER && resultCode == Activity.RESULT_OK) {
        // Get the URI and query the content provider for the phone number.
        val contactUri: Uri = data.data
        val projection: Array<String> = arrayOf(CommonDataKinds.Phone.NUMBER)
        contentResolver.query(contactUri, projection, null, null, null).use { cursor ->
            // If the cursor returned is valid, get the phone number.
            if (cursor.moveToFirst()) {
                val numberIndex = cursor.getColumnIndex(CommonDataKinds.Phone.NUMBER)
                val number = cursor.getString(numberIndex)
                // Do something with the phone number.
                ...
            }
        }
    }
}

Java

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 から推測されます。

インテントの例:

Kotlin

fun viewContact(contactUri: Uri) {
    val intent = Intent(Intent.ACTION_VIEW, contactUri)
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

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 つ以上のエクストラ 連絡先情報のフィールドに自動入力できます。

インテントの例:

Kotlin

fun editContact(contactUri: Uri, email: String) {
    val intent = Intent(Intent.ACTION_EDIT).apply {
        data = contactUri
        putExtra(ContactsContract.Intents.Insert.EMAIL, email)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

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 アクションを使用します。 Contacts.CONTENT_TYPE を次のように指定します。 既知の連絡先情報を ContactsContract.Intents.Insert の定数。

操作
ACTION_INSERT
データ URI スキーム
なし
MIME タイプ
Contacts.CONTENT_TYPE
エクストラ
ContactsContract.Intents.Insert で定義されているエクストラを 1 つ以上指定します。

インテントの例:

Kotlin

fun insertContact(name: String, email: String) {
    val intent = Intent(Intent.ACTION_INSERT).apply {
        type = ContactsContract.Contacts.CONTENT_TYPE
        putExtra(ContactsContract.Intents.Insert.NAME, name)
        putExtra(ContactsContract.Intents.Insert.EMAIL, email)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

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
すべての「To」を含む文字列配列受信者のメールアドレスも指定できます
Intent.EXTRA_CC
「CC」としてメールを送信するアドレスを格納した文字列配列です。
Intent.EXTRA_BCC
すべての「BCC」を含む文字列配列受信者のメールアドレスも指定できます
Intent.EXTRA_SUBJECT
メールの件名を含む文字列。
Intent.EXTRA_TEXT
メールの本文を含む文字列。
Intent.EXTRA_STREAM
添付ファイルを指す UriACTION_SEND_MULTIPLE アクションを使用する場合は、複数の Uri オブジェクトを含む ArrayList になります。

インテントの例:

Kotlin

fun composeEmail(addresses: Array<String>, subject: String, attachment: Uri) {
    val intent = Intent(Intent.ACTION_SEND).apply {
        type = "*/*"
        putExtra(Intent.EXTRA_EMAIL, addresses)
        putExtra(Intent.EXTRA_SUBJECT, subject)
        putExtra(Intent.EXTRA_STREAM, attachment)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

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:" データスキームを含めます。

Kotlin

fun composeEmail(addresses: Array<String>, subject: String) {
    val intent = Intent(Intent.ACTION_SENDTO).apply {
        data = Uri.parse("mailto:") // Only email apps handle this.
        putExtra(Intent.EXTRA_EMAIL, addresses)
        putExtra(Intent.EXTRA_SUBJECT, subject)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

public void composeEmail(String[] addresses, String subject) {
    Intent intent = new Intent(Intent.ACTION_SENDTO);
    intent.setData(Uri.parse("mailto:")); // Only email apps 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 など、任意の URI を指定できます。ただし、選択可能なファイルを、アクセス可能なファイルのみに制限したい場合は、 コンテンツ プロバイダ(content: URI)から作成されており、 openFileDescriptor(), 追加 CATEGORY_OPENABLE カテゴリをインテントに追加します。

Android 4.3(API レベル 18)以降では、 ユーザーが複数のファイルを選択できるように、 EXTRA_ALLOW_MULTIPLE をインテントに追加し、true に設定します。 その後、ClipData で選択した各ファイルにアクセスできます。 getClipData() から返されたオブジェクト。

操作
ACTION_GET_CONTENT
データ URI スキーム
なし
MIME タイプ
ユーザーが選択する必要があるファイル形式に対応する MIME タイプ。
おまけ
EXTRA_ALLOW_MULTIPLE
ユーザーが一度に複数のファイルを選択できるかどうかを宣言するブール値。
EXTRA_LOCAL_ONLY
返されたファイルを別のデバイスから直接利用できる必要があるかどうかを宣言するブール値 リモート サービスからダウンロードする必要はありません。
カテゴリ(省略可)
CATEGORY_OPENABLE
openFileDescriptor() によるファイル ストリームとして利用可能な「開くことができる」ファイルのみを返します。

写真を取得するインテントの例:

Kotlin

const val REQUEST_IMAGE_GET = 1

fun selectImage() {
    val intent = Intent(Intent.ACTION_GET_CONTENT).apply {
        type = "image/*"
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivityForResult(intent, REQUEST_IMAGE_GET)
    }
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    if (requestCode == REQUEST_IMAGE_GET && resultCode == Activity.RESULT_OK) {
        val thumbnail: Bitmap = data.getParcelableExtra("data")
        val fullPhotoUri: Uri = data.data
        // Do work with photo saved at fullPhotoUri.
        ...
    }
}

Java

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 で実行する場合、アプリにインポートする必要があるファイルのコピーを取得する代わりに、ACTION_GET_CONTENT アクションを使用して取得するのではなく、 4.4 以降では、代わりに次の方法で、別のアプリで管理されているファイルを開くようリクエストできます。 ACTION_OPEN_DOCUMENT アクションを使用し、MIME タイプを指定します。 アプリから書き込み可能な新しいドキュメントをユーザーが作成できるようにするには、代わりに ACTION_CREATE_DOCUMENT アクションを使用します。

たとえば、 既存の PDF ドキュメントから選択する、ACTION_CREATE_DOCUMENT インテントを使用すると、新しいドキュメントを作成する場所(別のアプリ内など)をユーザーが選択できます。 ドキュメントのストレージを管理しますアプリは、そのアプリの場所の URI ロケーションを受け取ります。 新しいドキュメントを作成できます

onActivityResult() に配信されるインテントは、 メソッドの ACTION_GET_CONTENT アクションのメソッドは、 任意の型の URI(ACTION_OPEN_DOCUMENT からの結果インテント)を返す ACTION_CREATE_DOCUMENT では常に、選択したファイルを DocumentsProvider を基盤とする content: URI として指定します。[ openFileDescriptor() を含むファイルと DocumentsContract.Document の列を使用してその詳細をクエリします。

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

複数のファイルを選択できるようにするには、 EXTRA_ALLOW_MULTIPLE をインテントに追加し、true に設定します。 ユーザーが 1 つの項目のみを選択した場合は、getData() から項目を取得できます。ユーザーが複数のアイテムを選択した場合、getData() は null を返します。代わりに、 ClipData から各アイテムを取得する getClipData() によって返されるオブジェクトです。

注: インテントでは MIME タイプを指定する必要がありますCATEGORY_OPENABLE カテゴリを宣言する必要があります。条件 適切な場合は、MIME タイプの配列を EXTRA_MIME_TYPES のエクストラを使用する場合は、 setType() のプライマリ MIME タイプを "*/*" に設定します。

操作
ACTION_OPEN_DOCUMENTまたは
ACTION_CREATE_DOCUMENT
データ URI スキーム
なし
MIME タイプ
ユーザーが選択する必要があるファイル形式に対応する MIME タイプ。
エクストラ
EXTRA_MIME_TYPES
アプリのファイルタイプに対応する MIME タイプの配列 あります。このエクストラを使用する場合は、メイン MIME タイプを setType() から "*/*" に変更。
EXTRA_ALLOW_MULTIPLE
ユーザーが一度に複数のファイルを選択できるかどうかを示すブール値です。
EXTRA_TITLE
ACTION_CREATE_DOCUMENT で使用して、初期ファイル名を指定します。
EXTRA_LOCAL_ONLY
返されたファイルを別のデバイスから直接利用できる必要があるかどうかを宣言するブール値 リモート サービスからダウンロードする必要はありません。
カテゴリ
CATEGORY_OPENABLE
「開く」のみを返すファイル ストリームとして表現できる openFileDescriptor() に置き換えます。

写真を取得するインテントの例:

Kotlin

const val REQUEST_IMAGE_OPEN = 1

fun selectImage2() {
    val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
        type = "image/*"
        addCategory(Intent.CATEGORY_OPENABLE)
    }
    // Only the system receives the ACTION_OPEN_DOCUMENT, so no need to test.
    startActivityForResult(intent, REQUEST_IMAGE_OPEN)
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    if (requestCode == REQUEST_IMAGE_OPEN && resultCode == Activity.RESULT_OK) {
        val fullPhotoUri: Uri = data.data
        // Do work with full size photo saved at fullPhotoUri.
        ...
    }
}

Java

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 音声操作

  • 「タクシーを呼んで」
  • 「タクシーを呼んで」

(Wear OS のみ)

タクシーを呼ぶには、 ACTION_RESERVE_TAXI_RESERVATION できます。

注: アプリがこのアクションを完了するには、ユーザーの確認が必要です。

操作
ACTION_RESERVE_TAXI_RESERVATION
データ URI
なし
MIME タイプ
なし
エクストラ
なし

例のインテント:

Kotlin

fun callCar() {
    val intent = Intent(ReserveIntents.ACTION_RESERVE_TAXI_RESERVATION)
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

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
[自分の番地] の位置を表示します。具体的な住所や場所のクエリを指定できます。

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

注: geo URI で渡す文字列はすべて、 渡されます。たとえば、文字列 1st & Pike, Seattle は次のようになります。 1st%20%26%20Pike%2C%20Seattle。文字列内のスペースは %20 でエンコードされるか、プラス記号(+)に置き換えられます。

MIME タイプ
なし

インテントの例:

Kotlin

fun showMap(geoLocation: Uri) {
    val intent = Intent(Intent.ACTION_VIEW).apply {
        data = geoLocation
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

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"
アプリで必要なその他のデバイス。

インテントの例:

Kotlin

fun playMedia(file: Uri) {
    val intent = Intent(Intent.ACTION_VIEW).apply {
        data = file
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

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 音声操作

  • 「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(必須): アルバム、アーティスト、ジャンル、プレイリスト、曲名を自由に組み合わせた文字列です。このエクストラは常に 下位互換性があります。検索モードを判別できない既存のアプリは、 このインテントを非構造化検索として処理します。

例のインテント:

ユーザーが特定のアーティストの音楽を聴きたい場合、検索アプリが 確認します。

Kotlin

fun playSearchArtist(artist: String) {
    val intent = Intent(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH).apply {
        putExtra(MediaStore.EXTRA_MEDIA_FOCUS, MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE)
        putExtra(MediaStore.EXTRA_MEDIA_ARTIST, artist)
        putExtra(SearchManager.QUERY, artist)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

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>

アクティビティでこのインテントを処理する場合は、 着信に EXTRA_MEDIA_FOCUS 個のエクストラ Intent: 検索モードを決定します。アクティビティが特定されたら 検索モードでは、その特定の検索モードの追加エクストラの値を読み取ります。 この情報を使用して、アプリはインベントリ内で検索を行い、 コンテンツが表示されます。これを次の例に示します。

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
    ...
    if (intent.action.compareTo(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH) == 0) {

        val mediaFocus: String? = intent.getStringExtra(MediaStore.EXTRA_MEDIA_FOCUS)
        val query: String? = intent.getStringExtra(SearchManager.QUERY)

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

        // Determine the search mode and use the corresponding extras.
        when {
            mediaFocus == null -> {
                // 'Unstructured' search mode (backward compatible)
                playUnstructuredSearch(query)
            }
            mediaFocus.compareTo("vnd.android.cursor.item/*") == 0 -> {
                if (query?.isNotEmpty() == true) {
                    // 'Unstructured' search mode.
                    playUnstructuredSearch(query)
                } else {
                    // 'Any' search mode.
                    playResumeLastPlaylist()
                }
            }
            mediaFocus.compareTo(MediaStore.Audio.Genres.ENTRY_CONTENT_TYPE) == 0 -> {
                // 'Genre' search mode.
                playGenre(genre)
            }
            mediaFocus.compareTo(MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE) == 0 -> {
                // 'Artist' search mode.
                playArtist(artist, genre)
            }
            mediaFocus.compareTo(MediaStore.Audio.Albums.ENTRY_CONTENT_TYPE) == 0 -> {
                // 'Album' search mode.
                playAlbum(album, artist)
            }
            mediaFocus.compareTo("vnd.android.cursor.item/audio") == 0 -> {
                // 'Song' search mode.
                playSong(album, artist, genre, title)
            }
            mediaFocus.compareTo(MediaStore.Audio.Playlists.ENTRY_CONTENT_TYPE) == 0 -> {
                // 'Playlist' search mode.
                playPlaylist(album, artist, genre, playlist, title)
            }
        }
    }
}

Java

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 might 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
メモのテキストを示す文字列。

例のインテント:

Kotlin

fun createNote(subject: String, text: String) {
    val intent = Intent(NoteIntents.ACTION_CREATE_NOTE).apply {
        putExtra(NoteIntents.EXTRA_NAME, subject)
        putExtra(NoteIntents.EXTRA_TEXT, text)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

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 音声操作

  • 「555-5555 に電話して」
  • 「石田に電話して」
  • 「ボイスメールに電話」

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

ACTION_CALL アクションでは、 CALL_PHONE 権限をマニフェスト ファイルに追加します。

<uses-permission android:name="android.permission.CALL_PHONE" />
操作
データ URI スキーム
  • tel:<phone-number>
  • voicemail:<phone-number>
MIME タイプ
なし

有効な電話番号とは、 IETF RFC 3966 をご覧ください。 有効な例:

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

電話アプリの電話アプリは、次のようなスキームの正規化に優れています。 あります。したがって、ここで説明するスキームは、 Uri.parse() メソッドを使用します。 この方法を試したことがない場合や Uri.fromParts() を使用してください。 メソッドを使用してください。

インテントの例:

Kotlin

fun dialPhoneNumber(phoneNumber: String) {
    val intent = Intent(Intent.ACTION_DIAL).apply {
        data = Uri.parse("tel:$phoneNumber")
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

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 音声操作

  • 「myvideoapp で猫の動画を検索して」

アプリのコンテキスト内で検索をサポートするには、 SEARCH_ACTION アクションを指定します。

注: アプリ検索に SEARCH_ACTION を使用することはおすすめしません。 代わりに、 GET_THING アクションを使用して、アプリ内検索で Google アシスタントの組み込みサポートを利用できます。詳細については、次をご覧ください: Google アシスタント App Actions のドキュメントをご覧ください。

操作
"com.google.android.gms.actions.SEARCH_ACTION"
Google 音声操作による検索クエリをサポートします。
エクストラ
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
検索文字列。

インテントの例:

Kotlin

fun searchWeb(query: String) {
    val intent = Intent(Intent.ACTION_WEB_SEARCH).apply {
        putExtra(SearchManager.QUERY, query)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

public void searchWeb(String query) {
    Intent intent = new Intent(Intent.ACTION_WEB_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 タイプ
なし

インテントの例:

Kotlin

fun openWifiSettings() {
    val intent = Intent(Settings.ACTION_WIFI_SETTINGS)
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

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

テキスト メッセージ

テキスト メッセージ アプリでは、添付ファイル付きの SMS/MMS メッセージを作成する操作が一般的です。 インテント フィルタを作成して、 説明します。

添付ファイル付きの 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
添付する画像または動画を指す UriACTION_SEND_MULTIPLE アクションを使用する場合、 このエクストラは ArrayList 添付する画像または動画を指す Uri オブジェクト。

例のインテント:

Kotlin

fun composeMmsMessage(message: String, attachment: Uri) {
    val intent = Intent(Intent.ACTION_SENDTO).apply {
        type = HTTP.PLAIN_TEXT_TYPE
        putExtra("sms_body", message)
        putExtra(Intent.EXTRA_STREAM, attachment)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

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:" データスキームを含めます。

Kotlin

fun composeMmsMessage(message: String, attachment: Uri) {
    val intent = Intent(Intent.ACTION_SEND).apply {
        data = Uri.parse("smsto:")  // Only SMS apps respond to this.
        putExtra("sms_body", message)
        putExtra(Intent.EXTRA_STREAM, attachment)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

public void composeMmsMessage(String message, Uri attachment) {
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setData(Uri.parse("smsto:"));  // Only SMS apps respond to this.
    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 の読み込みは、ウェブブラウザ アプリの一般的なアクションです。インテント フィルタを作成して、 説明します。

ウェブ 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"

インテントの例:

Kotlin

fun openWebPage(url: String) {
    val webpage: Uri = Uri.parse(url)
    val intent = Intent(Intent.ACTION_VIEW, webpage)
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

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 アプリリンクの処理

Android 12(API レベル 31)以降、一般的なウェブ インテントは、そのウェブ インテントに含まれる特定のドメインについてアプリが承認されている場合のみ、アプリのアクティビティに解決されます。アプリがドメインに対して承認されない場合、ウェブは ユーザーのデフォルトのブラウザアプリに解決されます。

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. 必要なインテント フィルタを定義している場合は、そのインテントを処理します。

詳細については、次をご覧ください: シェルコマンドを発行する