Intentとナビゲーション
明示的なIntentでActivity間を移動し、putExtra/getExtraでデータを渡し、暗黙的なIntentで外部アプリを起動します。
「Intentとナビゲーション」はCoddyKit上の無料Android Academyレッスンです。 これはレッスン5/7です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAndroid Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Android Academyコースには全7レッスンが含まれています。
Intentとは
Intentは、Androidに何かを実行するよう伝えるメッセージです。
- Explicit Intent — アプリ内の特定のActivityを起動します
- Implicit Intent — アクションを処理できるアプリをAndroidに探してもらいます(URLを開く、番号に電話をかける、テキストを共有するなど)
Intentは、Activity同士が通信するための主な方法です。
Explicit Intent:画面を開く
アプリ内の別のActivityを起動します。
// In your button click listener:
binding.btnGoToDetail.setOnClickListener {
val intent = Intent(this, DetailActivity::class.java)
startActivity(intent)
}
// To also close the current screen after navigating:
binding.btnLogin.setOnClickListener {
val intent = Intent(this, HomeActivity::class.java)
startActivity(intent)
finish() // removes LoginActivity from back stack
}Extrasでデータを渡す
extrasを使って、次のActivityにデータを渡します。
intent.putExtra("key", value)— データを付加しますintent.getStringExtra("key")— Stringを取得しますintent.getIntExtra("key", defaultValue)— Intを取得します
タイプミスを防ぐため、キーには定数を使用してください。
Extrasを渡して受け取る
あるActivityからデータを送り、次のActivityで読み取ります。
// Sending Activity:
val intent = Intent(this, DetailActivity::class.java)
intent.putExtra("PRODUCT_ID", 42)
intent.putExtra("PRODUCT_NAME", "Laptop")
startActivity(intent)
// DetailActivity — receiving:
class DetailActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_detail)
val id = intent.getIntExtra("PRODUCT_ID", -1)
val name = intent.getStringExtra("PRODUCT_NAME") ?: ""
// Use id and name to load data
}
}Implicit Intent
Implicit Intentを使うと、処理を担当するアプリを指定せずに、インストール済みの他のアプリの機能を利用できます。
- ブラウザでWeb URLを開く
- 電話番号に発信する
- メールを送信する
- 任意のアプリにテキストを共有する
複数のアプリがIntentを処理できる場合、Androidは選択画面を表示します。
よく使うImplicit Intent
Implicit Intentでシステムのアクションを起動します。
import android.content.Intent
import android.net.Uri
// Open a web page
val webIntent = Intent(Intent.ACTION_VIEW,
Uri.parse("https://developer.android.com"))
startActivity(webIntent)
// Dial a phone number
val dialIntent = Intent(Intent.ACTION_DIAL,
Uri.parse("tel:+15551234567"))
startActivity(dialIntent)
// Share text
val shareIntent = Intent(Intent.ACTION_SEND).apply {
type = "text/plain"
putExtra(Intent.EXTRA_TEXT, "Check out this app!")
}
startActivity(Intent.createChooser(shareIntent, "Share via"))結果を受け取る
画像選択やフォームなど、別の画面から結果を受け取る必要がある場合は、Activity Result APIを使用します。
registerForActivityResultでlauncherを登録する- 必要なときに起動する
- callbackで結果を処理する
これは、以前のstartActivityForResult/onActivityResultパターンに代わるものです。
Result APIの例
ギャラリーから写真を要求し、受け取ります。
import androidx.activity.result.contract.ActivityResultContracts
class MainActivity : AppCompatActivity() {
private val pickImage = registerForActivityResult(
ActivityResultContracts.GetContent()
) { uri ->
// 'uri' is the selected image URI, or null if cancelled
if (uri != null) {
binding.ivPhoto.setImageURI(uri)
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// ...
binding.btnPickPhoto.setOnClickListener {
pickImage.launch("image/*")
}
}
}ディープリンク
ディープリンクは、アプリ内の特定の画面を直接開くURLです。プッシュ通知やマーケティング用リンクに便利です。
AndroidManifest.xmlで、URLのスキームとホストを指定するdataタグを含むintent-filterを使ってディープリンクを宣言します。
クイックチェック
ユーザーのブラウザでWebサイトを開くには、どの種類のIntentを使用しますか?
復習:Intentとナビゲーション
これで画面間を移動し、システム機能を起動できるようになりました。
- Explicit Intent — アプリ内の特定のActivityを起動します
putExtra/getExtra— Activity間でデータを渡します- Implicit Intent — URLを開く、番号に発信する、コンテンツを共有するなどの操作を行います
- Activity Result API — 別のActivityからデータを受け取ります
次は、RecyclerViewを使って動的なリストを表示します。
よくある質問
「Intentとナビゲーション」レッスンは無料ですか?
はい。「Intentとナビゲーション」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Android Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Android Academyコースには全7レッスンが含まれています。
「Intentとナビゲーション」で何を学びますか?
明示的なIntentでActivity間を移動し、putExtra/getExtraでデータを渡し、暗黙的なIntentで外部アプリを起動します。 ブラウザで直接実行するハンズオンコードでAndroid Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Android Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAndroid Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン5/7です。
「Intentとナビゲーション」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAndroid Academyレッスンでコードを書いて実行できますか?
はい。すべてのAndroid Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。