Androidプログラミングの基礎[3] 暗黙インテント [Android]
今回のテーマは「暗黙インテント」です。
第3回: 暗黙インテント
Androidの特徴の一つとしてアプリケーション間の連携がある。共有機能により他のアプリケーションを起動しデータを連携することが出来る。
暗黙インテントとはAndroidのアプリケーション間連携機能であり、相手のアプリケーション名を知らなくても、システムが最適な相手に渡してくれる。
1.暗黙インテントとインテントフィルター
例として、カメラアプリで写真を撮ったデータをメールソフトに送ったり、Facebookに連携して画像をアップロードしたりできる。
◎ インテントフィルター
Androidシステムは、AndroidManifest.xmlでアプリケーションにintent-filter要素で設定したインテントフィルターに基づいて、インテントの宛先を処理している。
インテントの調査は、インテントの保持するアクション、カテゴリー、データ3つの項目に対して行われる。
⇒ アクション
action要素でアクションを指定する。例えば「通話する」、「データを編集する」、「メッセージを配信する」などの内容を定義しておく。
⇒ カテゴリー
category要素でカテゴリーを指定する。カテゴリーはアクションに対する追加情報を表す。
⇒ データ
data要素でデータを指定します。取扱いに関する情報を、URIとMIMEタイプで指定する。例えば電話を掛けるURIは「tel:0123456789」、地図を示すURIは「geo:35.69,139.69」となる。
2.2つのアプリケーションの連携
インテントを送信するアプリケーションと受信するアプリケーションの2つを作成する。
◎ インテント受信アプリケーションの作成
プロジェクト設定
・新規Androidアプリケーション
アプリケーション名 | AnimalView |
プロジェクト名 | AnimalView |
パッケージ名 | jp.andsys.android.animalview |
最小必須 SDK | API 8: Android 2.2 (Froyo) |
ターゲット SDK | API 18 |
次でコンパイル | API 10: Android 2.3.3 (Gingerbread) |
テーマ | None |
・プロジェクトの構成
ディフォルトのまま
・アイコンの属性
ディフォルトのまま
・アクティビティーの作成
Blank Activity
・Blank Activity
アクティビティ名 | AnimalViewActivity |
レイアウト名 | main |
ナビゲーション・タイプ | None |
・プロジェクトの生成
アプリで使用する画像ファイルを以下にコピーします。
⇒ アクティビティの作成
・レイアウトXML作成
”AnimalView/res/layout/giraffe.xml”
Eclipseのメニューから「ファイル」、「新規」、「その他」を実行し、「Android」、「Android XML ファイルを」選択し、以下の設定でレイアウトXMLを作成します。
設定項目 | 入力値/選択項目 |
リソース・タイプ | Layout |
プロジェクト | AnimalView |
ファイル | giraffe |
ルート要素 | LinearLayout |
作成された、giraffe.xml ファイルを編集します。
・Giraffeアクティビティの作成
”AnimalView/src/jp/andsys/android/animalview/Giraffe.java”
Eclipseのメニューから「ファイル」、「新規」、「クラス」を選択し、「新規Javaクラス」画面から以下の設定でクラスを作る。
設定項目 | 入力値/選択項目 |
パッケージ | jp.andsys.android.animalview |
名前 | Giraffe |
スーパークラス | android.app.Activity |
インターフェース | なし |
作成された、Giraffe.java ファイルを編集します。
同様に、ライオンとカバを作成します。
ライオン用ソース
lion.xml
Lion.java
カバ用ソース
hippo.xml
Hippo.java
⇒ マニフェストの修正
アクティビティをAndroidManifest.xmlに追加し、インテントフィルターの設定を行う。
AndroidManifest.xml の編集
”AnimalView/AndroidManifest.xml”
◎ インテント送信アプリケーションの作成
インテント送信側のアプリケーションを作成します。
プロジェクト設定
・新規Androidアプリケーション
アプリケーション名 | ImplicitIntent |
プロジェクト名 | ImplicitIntent |
パッケージ名 | jp.andsys.android.ImplicitIntent |
最小必須 SDK | API 8: Android 2.2 (Froyo) |
ターゲット SDK | API 18 |
次でコンパイル | API 10: Android 2.3.3 (Gingerbread) |
テーマ | None |
・プロジェクトの構成
ディフォルトのまま
・アイコンの属性
ディフォルトのまま
・アクティビティーの作成
Blank Activity
・Blank Activity
アクティビティ名 | ImplicitIntentActivity |
レイアウト名 | main |
ナビゲーション・タイプ | None |
・プロジェクトの生成
main.xml の編集
”ImplicitIntent/res/layout/main.xml”
ImplicitIntentActivity.java の編集
”ImplicitIntent/src/jp/andsys/android/implicitintent/ImplicitIntentActivity.java”
⇒ 実行時の注意
AnimalViewアプリケーションを一度実行しておきます。次にImplicitIntentアプリを起動します。
「キリン」ボタンを押します。
戻るボタンを押します。
「すべて」ボタンを押すとリスト画面が現れるので、「ライオン」をクリックします。
ライオン画面がでます。
3.標準アプリケーションを起動する
Android標準のアプリケーションを起動するアプリケーションを作成します。
プロジェクト設定
・新規Androidアプリケーション
アプリケーション名 | ImplicitIntent2 |
プロジェクト名 | ImplicitIntent2 |
パッケージ名 | jp.andsys.android.ImplicitIntent2 |
最小必須 SDK | API 8: Android 2.2 (Froyo) |
ターゲット SDK | API 18 |
次でコンパイル | API 10: Android 2.3.3 (Gingerbread) |
テーマ | None |
・プロジェクトの構成
ディフォルトのまま
・アイコンの属性
ディフォルトのまま
・アクティビティーの作成
Blank Activity
・Blank Activity
アクティビティ名 | ImplicitIntent2Activity |
レイアウト名 | main |
ナビゲーション・タイプ | None |
・プロジェクトの生成
main.xml の編集
”ImplicitIntent/res/layout/main.xml”
ImplicitIntent2Activity.java の編集
”ImplicitIntent2/src/jp/andsys/android/implicitintent2/ImplicitIntent2Activity.java”
AndroidManifest.xml の編集
”AnimalView/AndroidManifest.xml”
・実行
◎ Web検索
Webブラウザーを起動する場合は、ACTION_WEB_SEARCHアクションを使ってIntentオブジェクトを作成します。
// Web検索
Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY, "アンドロイド");
URLを渡して表示する場合は次のようにします。
Uri uri = Uri.parse(“http://developer.android.com/”);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
◎ 電話をかける
電話を掛ける場合は、ACTION_CALLアクションを使います。
// 電話をかける
Intent intent = new Intent(Intent.ACTION_CALL,
Uri.parse("tel:01234567890"));
◎ マップを起動
マップアプリの起動は、ACTION_VIEWアクションを使います。
// 地図を起動
Intent intent = new Intent(Intent.ACTION_VIEW,
Uri.parse("geo:35.689, 139.691?z=16"));
マップアプリが無いためクラッシュ!
◎ オーディオを取得
オーディオアプリの起動は、ACTION_GET_CONTENTアクションを使い、setTypeメソッドでデータのMIMEタイプを指定します。
// オーディオを取得
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("audio/*");
◎ イメージを取得
イメージの場合以下のようにします。
// イメージを取得
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
4.他のアプリケーションを起動する
明示インテントにおけるインテントフィルターの扱いを説明するため、サンプルプログラム”IntentSample1”を起動するアプリケーションを作成する。
プロジェクト設定
・新規Androidアプリケーション
アプリケーション名 | AppStart |
プロジェクト名 | AppStart |
パッケージ名 | jp.andsys.android.appstart |
最小必須 SDK | API 8: Android 2.2 (Froyo) |
ターゲット SDK | API 18 |
次でコンパイル | API 10: Android 2.3.3 (Gingerbread) |
テーマ | None |
・プロジェクトの構成
ディフォルトのまま
・アイコンの属性
ディフォルトのまま
・アクティビティーの作成
Blank Activity
・Blank Activity
アクティビティ名 | AppStartActivity |
レイアウト名 | main |
ナビゲーション・タイプ | None |
・プロジェクトの生成
main.xml の編集
”AppStart/res/layout/main.xml”
AppStartActivity.java の編集
”AppStart/src/jp/andsys/android/appstart/AppStartActivity.java”
・実行
「IntentSample1 ActivityA起動」ボタンを押す。するとアプリケーションが起動します。
「IntentSample1 ActivityB起動(エラー)」ボタンを押す。するとエアーでアプリケーションがクラッシュしました。
IntentSample1 のAndroidManifest.xmlのActivityB のactivity要素に、以下のIntent-filter要素を設定すれば起動する。
”IntentSample1”アプリケーション修正後、「IntentSample1 ActivityB起動(エラー)」ボタンを押す。すると画面Bが起動しました。
以上で「暗黙インテント」を終了します。
本記事は以下の参考書を元にしています。