インテントを使用すると、別のアプリでアクティビティを開始するために、
ユーザーが希望するアクション(「地図を表示する」など)または
できます。Intent
オブジェクトで指定する必要があります。このタイプのインテント
暗黙的インテントと呼ばれます。これは、アプリを指定しないためです。
代わりに action を指定し、
アクションの実行に使用するデータ。
startActivity()
に発信したとき
または startActivityForResult()
を使用して暗黙的インテントを渡します。
解決
そのインテントをそのインテントを処理できるアプリに渡して、
対応する Activity
。インテントを処理できるアプリが複数ある場合、ユーザーが使用するアプリを選択できるダイアログが表示されます。
このページでは、実行するために使用できる暗黙的インテントについて説明します。 インテントを処理するアプリのタイプ別に整理された一般的なアクション。各 セクションに、インテントの作成方法も示しています。 フィルタを使用して、アプリのアクション実行機能をアドバタイズできます。
注意: デバイスに暗黙的インテントを受け取ることができるアプリがない場合、startActivity()
を呼び出すとアプリがクラッシュします。最初に、
インテントを受け取るアプリが存在する場合は、Intent
オブジェクトで resolveActivity()
を呼び出します。結果が null 以外の場合は、インテントを処理できるアプリが少なくとも 1 つあることを意味し、startActivity()
を安全に呼び出すことができます。結果が null の場合は、そのインテントは使用せず、可能であればそのインテントを呼び出す機能を無効にします。
インテントやインテント フィルタの作成方法がわからない場合は、まずインテントとインテント フィルタ。
このページに記載されているインテントを開発から呼び出す方法を学ぶ 詳しくは、Android Debug でインテントを検証する ブリッジ セクションがあります。
Google 音声操作
Google Voice Actions は、音声コマンドへの応答として、このページに記載されているインテントの一部を呼び出します。詳細については、<ph type="x-smartling-placeholder"></ph>をご覧ください。 システム音声操作を使ってみる
目覚まし時計
必要な情報を含む、目覚まし時計アプリの一般的なアクションは次のとおりです を作成することで、アプリの各アクションの実行機能をアドバタイズできます。
アラームを作成
新しいアラームを作成するには、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>
タイマーを作成する
カウントダウン タイマーを作成するには、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>
このインテントを処理する際、受け取った Intent
の EXTRA_OUTPUT
エクストラをアクティビティで確認してから、キャプチャした画像や動画を
エクストラで指定された位置を確認し、圧縮されたサムネイルを含む Intent
で setResult()
を呼び出します。
名前は「"data"
」です。
カメラアプリを静止画像モードで起動する
カメラアプリを静止画像モードで起動するには、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>
カメラアプリを動画モードで起動する
カメラアプリを動画モードで開くには、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
- 添付ファイルを指す
Uri
。ACTION_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 supportsOpenableColumns
andContentResolver.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>
アプリで管理するファイルを他のアプリから開けるようにする方法について詳しくは、 ストレージ アクセス フレームワークを使用してファイルを開くを読む。
ローカル アクション
車への電話は、一般的なローカル アクションです。インテント フィルタを作成して、特定のアクションを この操作を行うには、次のセクションの情報を使用します。
タクシーを呼ぶ
タクシーを呼ぶには、
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>
検索クエリから音楽を再生する
検索クエリに基づいて音楽を再生するには、
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
(必須): 任意の組み合わせを含む文字列 曲名 ジャンルを入力します
-
特定のジャンルの音楽を再生します。
その他の特典:
"android.intent.extra.genre"
(必須)- ジャンル。QUERY
(必須): ジャンル。このエクストラは常に 下位互換性を確保します。検索モードを認識していない既存のアプリは、 非構造化検索として認識されます。
アーティスト -
Audio.Artists.ENTRY_CONTENT_TYPE
-
特定のアーティストの音楽を再生する。
追加のエクストラ値
EXTRA_MEDIA_ARTIST
(必須): アーティスト。"android.intent.extra.genre"
: ジャンル。QUERY
(必須): 任意の組み合わせを含む文字列 特定することもできますこのエクストラは、常に下位互換性を保つために提供されています。 検索モードを判別できない既存のアプリは、このインテントを非構造化データとして処理できます。 できます。
-
特定のアルバムの曲を再生する
その他の特典:
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
(必須): 任意の組み合わせを含む文字列 アルバム、アーティスト、ジャンル、タイトルのいずれかを指定します。このエクストラは常に 下位互換性が確保されます検索モードを判別できない既存のアプリは、このインテントを非構造化検索として処理する場合があります。
-
特定のプレイリスト、または指定した条件に一致するプレイリストを再生する なります。
その他の特典:
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
- メモのテキストを示す文字列。
-
- 操作
-
ACTION_DIAL
- 電話アプリを開きます。ACTION_CALL
- 電話をかけます(CALL_PHONE
権限)
- データ URI スキーム
-
tel:<phone-number>
voicemail:<phone-number>
- MIME タイプ
- なし
tel:2125551212
tel:(212) 555 1212
- 操作
-
"com.google.android.gms.actions.SEARCH_ACTION"
- Google 音声操作による検索クエリをサポートします。
- エクストラ
-
QUERY
- 検索クエリを含む文字列。
- 操作
ACTION_WEB_SEARCH
- データ URI スキーム
- なし
- MIME タイプ
- なし
- エクストラ
-
SearchManager.QUERY
- 検索文字列。
- 操作
-
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 タイプ
- なし
- 操作
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
アクションを使用する場合、 このエクストラはArrayList
添付する画像または動画を指すUri
オブジェクト。
- 操作
ACTION_VIEW
- データ URI スキーム
http:<URL>
https:<URL>
- MIME タイプ
-
"text/plain"
"text/html"
"application/xhtml+xml"
"application/vnd.wap.xhtml+xml"
- 開発用 Android デバイスのセットアップ 仮想デバイスを使用する。
- サポートしたいインテントを処理するようにしたバージョンのアプリをインストールします。
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
- 必要なインテント フィルタを定義している場合は、そのインテントを処理します。
例のインテント:
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 スキームで電話番号を指定します。電話アプリが開くと電話番号が表示されます。ユーザーは通話ボタンをタップして通話を始める必要があります。
直接電話をかけるには、ACTION_CALL
アクションを使用して、次の URI スキームで電話番号を指定します。電話アプリを開くと、
通話が開始されます。ユーザーが通話ボタンをタップする必要はありません。
ACTION_CALL
アクションでは、
CALL_PHONE
権限をマニフェスト ファイルに追加します。
<uses-permission android:name="android.permission.CALL_PHONE" />
有効な電話番号とは、 IETF RFC 3966 をご覧ください。 有効な例:
電話アプリの電話アプリは、次のようなスキームの正規化に優れています。
あります。したがって、ここで説明するスキームは、
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); } }
検索
必要な情報を含む、検索アプリでの一般的な操作は次のとおりです。 を作成することで、アプリの各アクションの実行機能をアドバタイズできます。
特定のアプリを使用して検索する
アプリのコンテキスト内で検索をサポートするには、
SEARCH_ACTION
アクションを指定します。
注: アプリ検索に SEARCH_ACTION
を使用することはおすすめしません。
代わりに、
GET_THING
アクションを使用して、アプリ内検索で Google アシスタントの組み込みサポートを利用できます。詳細については、次をご覧ください:
Google アシスタント
App Actions のドキュメントをご覧ください。
インテント フィルタの例:
<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
のエクストラ。
インテントの例:
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); } }
設定
アプリでユーザーに変更を要求しているときにシステム設定アプリで画面を開くには、 次のいずれかのインテントのアクションを使用します。
インテントの例:
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 テキスト メッセージを開始するには、次のいずれかのインテント アクションを使用して、メッセージを指定します 次の追加キーを使用して、電話番号、件名、メール本文などの詳細情報を追加できます。
例のインテント:
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 を読み込む
ウェブページを開くには、ACTION_VIEW
アクションを使用します。
インテント データでウェブ URL を指定します。
インテントの例:
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
ツールで、以下を実行して特定のインテントを起動できます。
次のとおりです。
詳細については、次をご覧ください: シェルコマンドを発行する。