Activity

Acitivity について、ごく簡単に開設を載せておきます。

別 Activity の起動

Activity は、画面相当のコンポーネントです。

Windows 系アプリならウィンドウがあがるような場面で、モバイル系アプリでは、画面が切り替わりながら作業が進むと思います。 その画面相当がActivity です。

いくつか例をあげます。

  • ボタンなどを押したら、選択メニューなどがでて、選択結果が元のアプリに反映される。
  • ボタンなどを押したら、外部アプリが起動して(カメラで撮影とか、ファイルを選択とか)、結果が元のアプリに反映される。
  • ボタンなどを押したら、外部アプリが起動して(ブラウザがあがるとか)、元のアプリとは別に処理が進む。

基本的に Activity は、スタックのように作業が積みあがっていくのですが(公式文書:タスクとバックスタック)、 一方で別の Activity が動いているあいだに、元のアプリが勝手に終了したり休止していたりってこともあります(参考:ライフサイクル)。

で、全体像は公式文書を見てもらうのが一番だと思うのですが、 いくつか簡単にピックアップして紹介しておきます。

Intent を介した Activity の開始

android.content.Intent を介して Activity を起動することができます。 その際、2種類の方法があります。

  • 明示的 Intent: 起動する Activity をクラス名などで指定するケース。
  • 暗黙的 Intent: おこないたい操作はある(画像選択や Web ページ閲覧など)が、アプリは決める必要がないケース。

また、上記に述べたように、Activity が終わった後、答えを返してほしいケースもありますが、その際も Intent を利用します。

今回のアプリ例では、

  • LISTVIEW ボタンからの選択用 Activity の例:明示的&結果処理
  • SHARE ボタンを用いた外部アプリ起動の例:暗黙的

を載せています。

明示的+結果処理

明示的 Intent の起動だけなら、公式文書:明示的インテントの例 の要にクラス名を指定して、startSErvice() で呼び出すだけです。

ただ、結果を受け取る場合は、 公式文書:Activity からの結果の取得 にあるように、まずは結果を受け取るためのハンドラを登録し、 作成された ActivityResultLauncher を使って、Intent の起動をおこないます。

プログラム例のCallback 登録部Activity起動部

暗黙的 Intent

暗黙的 Intent の場合は、Intent の種類を setType() メソッドで指定したうえでstartActivity() で呼び出します。

電話や地図などの指定例については、公式:別のアプリへのユーザーの送信に丁寧な説明があります。

今回のプログラム例では、ただの文字列("Hello World!") を ACTION_SEND で送り、利用するアプリを選ぶためのアプリチューザをあげてみました(該当コード)。

Read more