Intent 与导航
使用显式 Intent 在 Activity 之间导航,通过 putExtra/getExtra 传递数据,并使用隐式 Intent 启动外部应用。
Intent 与导航 是 CoddyKit 上的免费 Android Academy 课时。 这是第 5 节课,共 7 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Android Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Android Academy 课程共包含 7 节课。
什么是 Intent?
Intent 是一条告诉 Android 执行某项操作的消息:
- 显式 Intent — 启动应用中的指定 Activity
- 隐式 Intent — 请求 Android 查找能够处理该操作的应用(打开网址、拨打电话、分享文本)
Intent 是 Activity 之间进行通信的主要方式。
显式 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
}使用附加数据传递数据
使用附加数据向下一个 Activity 传递数据:
intent.putExtra("key", value)— 附加数据intent.getStringExtra("key")— 获取 Stringintent.getIntExtra("key", defaultValue)— 获取 Int
请使用常量作为键,以避免拼写错误。
传递和接收附加数据
从一个 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
}
}隐式 Intent
隐式 Intent 让您的应用无需知道由哪个应用处理操作,就能使用其他已安装应用的功能:
- 在浏览器中打开网址
- 拨打电话号码
- 发送电子邮件
- 将文本分享给任意应用
如果有多个应用可以处理该 Intent,Android 会显示应用选择器。
常见的隐式 Intent
使用隐式 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注册启动器 - 需要时启动它
- 在回调中处理结果
这替代了旧的 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/*")
}
}
}深层链接
深层链接是一种可以直接在应用中打开指定屏幕的网址——适用于推送通知和营销链接。
使用带有 data 标签的 intent-filter,在 AndroidManifest.xml 中声明深层链接,并在其中指定网址的协议和主机。
快速检查
要在用户的浏览器中打开网站,您应使用哪种 Intent?
回顾:Intent 与导航
现在您已经可以在屏幕之间导航并启动系统功能:
- 显式 Intent — 启动应用中的指定 Activity
putExtra/getExtra— 在 Activity 之间传递数据- 隐式 Intent — 打开网址、拨打电话、分享内容
- Activity Result API — 从另一个 Activity 接收数据
接下来:使用 RecyclerView 显示动态列表。
常见问题解答
「Intent 与导航」课时是免费的吗?
是的 — 「Intent 与导航」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Android Academy 课程的其余内容,请升级到 CoddyKit PRO。 Android Academy 课程共包含 7 节课。
「Intent 与导航」这节课中我会学到什么?
使用显式 Intent 在 Activity 之间导航,通过 putExtra/getExtra 传递数据,并使用隐式 Intent 启动外部应用。 你通过在浏览器中直接运行的动手代码来练习 Android Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Android Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Android Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 5 节课,共 7 节。
「Intent 与导航」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Android Academy 课中编写并运行代码吗?
能。每节 Android Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。