0Pricing
Android Academy · 课时

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") — 获取 String
  • intent.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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 项目结构与清单文件
  2. Activity 与生命周期
  3. 布局与视图
  4. 处理用户输入
  5. Intent 与导航
  6. Fragment
  7. 权限与运行时请求
← 返回 Android Academy