インテント (Intent)

ガイド

インテントとは?

 状態:-  閲覧数:2,205  投稿日:2013-04-11  更新日:2014-03-25  
Androidにおけるコンポーネント同士を結びつけるメッセージングの仕組み
・アプリケーションソフト間やソフト内の機能間を繋ぎ合わせる仕組み
・アクティビティ間の呼び出しの仕組み
・自分のアプリ内のコンポーネントだけでなく、他のアプリのコンポーネントを呼び出すことも可能

Intentを渡す
・各々のコンポーネントは、渡されるIntentを元に処理を実行したり、渡ってくるべきIntentへの期待値を表明することが可能
・インテントを送信することでアクティビティが起動

Intentオブジェクト自身の内容は?
・実行して欲しい処理を抽象的に記述するデータ構造を持つ


処理の流れ


ユーザが画面に表示されているデータに対して何らかの操作をしたい場合

1.アプリケーションがシステムにそれを伝える

2.システムはそのデータに対して操作を行うことができるアプリケーションや、アプリケーション内の機能を探し出して、ユーザに選択肢として提示
※アクティビティなどはインテントフィルタと呼ばれる仕組みを使ってどのようなインテントを受け取るのかを予め設定している

3.ユーザは提示された機能の中から実行したいものがあれば、その場でアプリケーションを呼び出して実行させることができる

インテントフィルタとは?
・IntentFilter
・コンポーネント自身が、どのようなIntentを期待しているかを表明する仕組み
・このフィルタを通過したコンポーネントが、期待通りのIntentを受け取れるものとみなされる
・ex.そのActivityを起動できるインテントを制限する、など

インテントの種類

 閲覧数:477 投稿日:2013-04-11 更新日:2014-03-25 

2種類


1.明示的インテント(explicit intent)
2.暗黙的インテント(implicit intent)


1.明示的インテント


予め呼出コンポーネント名を指定している(直接それを起動する)インテント
・誰に結びつくIntentかを表明しているIntent
・アクティビティを直接指定起動
・インテントフィルタは利用せず、指定されたコンポーネント名で解決可能

1-1.ターゲットを指定
1-2.指定されたターゲットが起動


※主に同一アプリケーション内での画面遷移(Activityを起動するため)に利用
・同一アプリケーション内のActivityを起動するだけなら、Actionなどは設定不要


2.暗黙的インテント


コンポーネント名を指定しないインテント
・誰に結びつくIntentかは直接表明せず、より抽象的に、期待する処理をしてくれるコンポーネントを呼び出すためのIntent
・起動コンポーネント名を明示せず、漠然とそのデータに対して実行できる機能の一覧を要求する
・通常は、他アプリへのインテントなど、コンポーネント名が事前に判らない場合に利用される
・暗黙のインテントは、インテントフィルタを用いて解決される
・インテントのパラメータ起動。ゆるい連携

2-1.ターゲットは指定しない
2-2.インテントを受信可能なターゲットが起動


※電話やブラウザを起動する場合に利用
・例えば、カメラを起動したいときに暗黙的Intentを利用することで、ユーザが好みのカメラアプリを選択できるようになる

「インテント送信方法」の種類

 閲覧数:406 投稿日:2013-04-12 更新日:2013-04-12 

2種類


1.startActivityメソッド
・遷移先から戻ってきた場合に、遷移先でセットした「戻り値」を受け取ることは不可

2.startActivityForResultメソッド
・遷移先から戻ってきた場合に、遷移先でセットした「戻り値」を受け取ることが可能

実装例

 閲覧数:371 投稿日:2013-04-12 更新日:2013-04-12 

1.明示的インテント


startActivityメソッド
・ボタンを押下した際、遷移先アクティビティを指定して、サブ画面を呼び出す
                  public void onClick(View v) {
                         Intent intent = new Intent(MainActivity.this, SubActivity.class);
                         startActivity(intent);
                 }



2.暗黙的インテント


startActivityメソッド
・ボタンを押下し、遷移先アクティビティを指定せず、ダイアラーを起動
※遷移先アクティビティを指定する必要がないため、アプリケーション間の柔軟な連携が可能になる
            public void onClick(View v) {
                   Intent intent = new Intent(Intent.ACTION_DIAL);
                   // 電話番号を設定
                   Uri uri = Uri.parse("tel:09012345678");
                   intent.setData(uri);
                   startActivity(intent);
           }



スレッド

コメント投稿(ログインが必要)