June 11, 2012

電話帳やブラウザなど外部アプリを起動する

アプリから電話帳やブラウザなど外部アプリを起動する方法です。

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