<HOME

Intentを使用して別のActivityを表示する30分


アプリ内でActivityを切り替える(表示されている画面を切り替える)方法について学習します。

  1. 「StartActivityTraining」アプリを作成します。

    1. Android Studioを起動し、新規プロジェクトを作成します。

      「Welcome to Android Studio」画面の場合は、「Start a new Android Studio project」をクリックします。

      別のプロジェクトが開いている場合は、ツールバーから「File」→「New」→「New Project...」をクリックします。

    2. HelloWorldの時と同じようにプロジェクトを作成していきます。

      アプリ名は「StartActivityTraining」としてください。

      今回は「Backwards Compatibility (AppCompat)」のチェックは外しておきます。

  2. アプリに新しいActivityを追加して、MainActivityから画面遷移してみましょう。

    1. 新しいActivityクラスと、そのActivityのレイアウトリソースを作成します。

      クラス名は「ActivityEx1」とします。

      サンプル : res/layout/activity_ex1.xml

      コードを表示するにはJavaScriptを有効にしてください

      サンプル : ActivityEx1.java

      コードを表示するにはJavaScriptを有効にしてください

    2. MainActivityに、ActivityEx1を起動するためのOptionsMenuを追加します。

      サンプル : res/menu/options.xml

      コードを表示するにはJavaScriptを有効にしてください

      サンプル : MainActivity.java

      コードを表示するにはJavaScriptを有効にしてください

    3. MainActivityからActivityEx1を起動する処理を追加します。

      Activityから別のActivityを起動するには、Activityクラスの「startActivity」メソッドを使用します。


      startActivityメソッドには、Intentを使用します。

      Intentは、アプリ間やActivity間でメッセージをやり取りするためのオブジェクトです。

      もう少しざっくり言うと、別のアプリに○○してほしい、○○Activityを起動したい、といった意思をつめこんだオブジェクトです。

      詳細については公式サイトに記載されています。

      Intent は、他のアプリ コンポーネントからのアクションを要求するときに使用するメッセージング オブジェクトです。インテントを使用することでコンポーネント間の通信を促進する方法はいくつかありますが、基本的な使用例は次の 3 つです。
      • アクティビティを開始するには:
      • サービスを開始するには:
      • ブロードキャストを配信するには:

      以下の処理を記述します。

      コードを表示するにはJavaScriptを有効にしてください

      Intentオブジェクトの引数1に起動要求を出すContext、引数2に起動したいActivityのclassを指定します。

      このIntentの情報をもとに、OSがActivityのインスタンスを生成し、起動処理を行ってくれます。

      サンプル : MainActivity.java

      コードを表示するにはJavaScriptを有効にしてください

    4. アプリを起動して、動作を確認してみましょう。

      ・・・クラッシュしてしまいました。

      Logcatにエラーログが出力されています。

      MainActivityのonOptionsItemメソッドで呼び出したstartActivityの一連の処理の中で、
      ActivityNotFoundExceptionが発生していることがわかります。

    5. ここで、「アプリプロジェクトの概要」のManifestの項で学んだことを思い出してください。

      Activityを使用するためには、AndroidManifestに記述する必要がある、ということを学習しました。


      先ほどは、AndroidManifestでActivityEx1を使用することを宣言していなかったので、
      OSがActivityEx1の存在を見つけることができず、Activityのstartに失敗してしまいました。


      ManifestにActivityEx1の宣言を追加します。

      コードを表示するにはJavaScriptを有効にしてください

      サンプル : AndroidManifest.xml

      コードを表示するにはJavaScriptを有効にしてください

    6. アプリを起動して、動作を確認してみましょう。

      ActivityEx1に遷移できればOKです。

  3. 今回はIntentを生成する際に、起動したいActivity(ActivityEx1)を明示的に指定しました。

    こういう、要求先を明示的に指定するIntentを、「明示的インテント」と呼びます。


    一方で、「どのアプリでもいいからメール送信できるアプリよ起動して」といった風に、

    要求先を明示的に指定せずに要求をかける方法もあります。

    こういう、要求先を明示的に指定しないIntentを、「暗黙的インテント」と呼びます。

    暗黙的インテントについては、別途説明します。

Intentを用いたアプリコンポーネント間の連携に関する詳細については公式ドキュメントに記載されています。

また、Androidは先人たちがネット上にたくさんの情報を残してくれています。

これらも活用して、是非このAPIを有効に使えるようになってください。