Intentを使ってstartActivity()で起動要求をかけることで、外部アプリを起動することができます。これはImplicit Intents(暗黙的なIntent)と呼ばれます。なぜかというと、Intentには起動したいアプリ名を直接指定するのではなく、Action、Category、Data(URIとMIMEタイプ)という実行したいことという間接的な情報を付加し、Android OSがそれを実行できると宣言しているアプリ(Intent Filterで受け取れると宣言している)を起動する仕組みになっています。実行できるアプリが複数ある場合はユーザーがその都度選択するダイアログがでてきます。
ActionやCategoryはIntentクラスでいわゆる一般的なものがたくさん定義されています。
例)ブラウザを起動する場合、Actionは表示要求、URIのスキームにhttpを指定します。
Uri uri = Uri.parse("http://developer.android.com/index.html"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent);
例)電話のダイヤルを起動する場合、Actionはダイヤル要求、URIのスキームにtelを指定します。
Uri uri = Uri.parse("tel:080-1234-5678"); Intent intent = new Intent(Intent.ACTION_DIAL, uri); startActivity(intent);
例)電話の通話を実行する場合、Actionはコール要求、URIのスキームにtelを指定します。
Uri uri = Uri.parse("tel:080-1234-5678"); Intent intent = new Intent(Intent.ACTION_CALL, uri); startActivity(intent);
例)カメラ(静止画)を起動する場合
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivity(intent);
例)カメラ(ビデオ)を起動する場合
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); startActivity(intent);
例)メールを起動する場合
Uri uri = Uri.parse("mailto:someone@abc.def"); Intent intent = new Intent(Intent.ACTION_SENDTO, uri); startActivity(intent);
例)地図を表示する場合、URIのスキームに"geo:緯度、経度?q=住所"のように設定します。
Uri uri = Uri.parse("geo:0,0?q=東京駅"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent);
例)設定画面を起動する場合、設定内容に応じてandroid.provider.Settingsで指定します。ここでは表示設定画面を起動します。
Intent intent = new Intent(android.provider.Settings.ACTION_DISPLAY_SETTINGS); startActivity(intent);
など、いろいろなアプリが対応しています。
逆に起動してもらうアプリを作る場合は「外部アプリから起動されるアプリを作る」を参照してください。
参考:Android Developers:Intents and Intent Filters
参考:Android Developers:Intent
No comments:
Post a Comment