明示的インテントと暗黙的インテント

あるアクティビティを起動する時には、明示的インテント (Explicit Intents) または暗黙的インテント (Implicit Intents) が利用できます。

明示的インテントというのは、コンポーネント (この場合アクティビティ) の名前を明示的に指定します。

アクティビティの名前を明示的に指定しないといけないので、明示的インテントは通常同一アプリケーション内でのアクティビティ間で利用されます。

他のアプリケーションの内部コンポーネント名を利用することは、通常プログラムの安定動作にとってはいい考えではないですからね。

一方、暗黙的インテントというのはコンポーネント名を指定する代わりに、 「http://foo... なる URI を表示するアクティビティを起動せよ」というメッセージを送ることを言います。

それではそれぞれ、具体的な実装方法をみてみましょう。

明示的インテント

次の例では MyActivity2 というアクティビティ名をインテントを作成。 そのインテントを startActivity メソッドに渡して、アクティビティを起動しています。

Intent intent = new Intent(this, MyActivity2.class);
startActivity(intent);

ちなみに、アクティビティはアンドロイドマニフェストに登録しないと起動しませんので、うまく動かないときはマニフェストを確認してみてください。

試しにマニフェストに登録しないと、次のようなエラーがデバッガにみえました。

android.content.ActivityNotFoundException: Unable to find explicit
activity class ... have you declared this activity in your 
AndroidManifest.xml?

この例では MyActivity2 という (自作の) アクティビティ名を明示的に指定しているので、 このインテントは明示的インテントと言えます。

暗黙的インテント

一方、暗黙的インテント (Implicit Intents) では次のようにします。

Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.google.com/"));
startActivity(intent);

アクションとして "android.content.Intent.ACTION_VIEW" を指定して、データ (URI) として "http://www.google.com/" を渡して、インテントを開始しています。

これによって、スキーマが "http" で、ホストが "www.google.com" のデータを表示できるアプリケーションをシステムに問い合わせて、システムがアクティビティを選んで起動します。 複数の候補がある時はそのリストを表示して、ユーザーがアプリケーションを選択できるようにします。

これには、インテント解決とかインテントフィルターといった仕組みが関わって来ますが、それについてはまた別の記事で説明します。

ここではアクティビティ名を具体的に指定する場合 (明示的インテント) と、 表示したいデータと行いたいアクションを指定することによってシステムがアクティビティを選択する場合 (暗黙的インテント) があることを抑えておけば OK です。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Android 開発入門