【Kotlin/Android Studio】Intentとは?Activity間のデータの受け渡し

この記事からわかること

  • Android Studio/KotlinIntentクラス実装方法
  • Intentの種類
  • 明示的インテント(Explicit Intent)と暗黙的インテント(Implicit Intent)の違い
  • Activity間でデータ受け渡す方法
  • 格納できるデータ型

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

参考文献:公式リファレンス:Intent
参考文献:公式リファレンス:Intent And Intent filter

環境

Intentクラスとは?

public class Intent
extends Object implements Parcelable, Cloneable

AndroidのIntentクラスとは異なるコンポーネント間(ActivityやServiceなど)でActivity間の移動やデータの受け渡し、アクションの実行(地図の表示、写真を撮るなど)、ブロードキャストメッセージの送信などを可能にする役割を持つメッセージングオブジェクトです。

基本的な役割は以下の3つのようです。

アクティビティを開始する

アプリ内の画面を司るActivityを新しく開始する

サービスを開始する

ユーザーインターフェースを持たず、バックグラウンドで操作を実行するコンポーネント(サービス)を開始する

ブロードキャストを配信する

システムの起動や端末の充電開始など、さまざまなシステムイベントに関するブロードキャストを配信する

Intentの種類

Intentは2種類のタイプに分かれます。

明示的インテント(Explicit Intent)

ターゲットアプリのパッケージ名またはコンポーネントの完全修飾クラス名を明示的に指定する。特定のアクティビティに遷移したり、特定のサービスを起動したりする場合に使用される。

暗黙的インテント(Implicit Intent)

特定のコンポーネントを直接指定せず、実行したい操作のみを指定する。システム側が求められた操作に適切なコンポーネントを選択。Webページの表示、地図上の操作、連絡先を選択など。

今回は明示的インテントを使用してActivity間でデータを受け渡す方法をまとめていきます。

Activity間でデータを受け渡す方法

手順

  1. Activityの追加
  2. Intentでデータを渡す
  3. データを受け取る

Intentのデータの保存と取り出しはAndroidでデータを格納する入れ物として多用されるBundleクラスを内部的に使用して実装されています。そのためIntentで保存するデータはキーと値のセットで管理されます。

Activityの追加

まずはデータの渡し先となるActivityを追加します。Androidアプリ内には複数のActivityを持たせることができるのでもともとある「MainActivity」とは別に「SecondActivity」を作成しておきます。

「app」>「java」>「com.example.プロジェクト名」で右クリックして「New」>「Fragment」>「Empty Views Activity」をクリックします。


class SecondActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_second)
    }
}

ここは特にIntentは関係のない作業になります。今回は単純にActivityを増やしたいだけなので特に中に記入はしません。

Intentでデータを渡す

次にMainActivity内でIntentを使用してデータを渡していきます。Intentの引数にはContext遷移先となるActivityを明示的に指定します。そしてデータを格納するのがputExtraメソッドです。保存するデータはキーと値のセットで管理されるので引数にキー文字列と保存したい値を渡します。


class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val intent = Intent(this, SecondActivity::class.java)
        intent.putExtra("key", "Test")
        startActivity(intent)
    }
}

そして最後にstartActivityメソッドを呼び出します。

データを受け取る

データを受け取るためには明示的に指定したSecondActivityクラスからintent.getStringExtraメソッドの引数に先ほど指定したキー文字列を渡します。


class SecondActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_second)

        val receivedData = intent.getStringExtra("key")
        Toast.makeText(this,receivedData.toString(),Toast.LENGTH_LONG)
            .show()
    }
}

これでActivity間でデータを受け渡すことができました。

格納できるデータ型

格納できるデータ型はString型だけではなく、putExtraメソッドの引数違いで複数用意されています。よく使うIntBooleanだけでなく、配列やParcelableインターフェースを実装したカスタムクラスなど様々なデータ型が格納できるようになっていましう。

@NonNull
public Intent putExtra(String name, boolean value) {
    throw new RuntimeException("Stub!");
}

@NonNull
public Intent putExtra(String name, byte value) {
    throw new RuntimeException("Stub!");
}

@NonNull
public Intent putExtra(String name, char value) {
    throw new RuntimeException("Stub!");
}

@NonNull
public Intent putExtra(String name, short value) {
    throw new RuntimeException("Stub!");
}

@NonNull
public Intent putExtra(String name, int value) {
    throw new RuntimeException("Stub!");
}

@NonNull
public Intent putExtra(String name, long value) {
    throw new RuntimeException("Stub!");
}

@NonNull
public Intent putExtra(String name, float value) {
    throw new RuntimeException("Stub!");
}

@NonNull
public Intent putExtra(String name, double value) {
    throw new RuntimeException("Stub!");
}

@NonNull
public Intent putExtra(String name, @Nullable  String value) {
    throw new RuntimeException("Stub!");
}

Intentでできること

他アプリへの共有機能の実装

ブラウザを起動してWebページを開く方法

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index