You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Composable中获取Intent传递的数据

直接从Composable读取Intent数据的实现方案

方案1:通过LocalContext直接读取(无额外依赖)

Compose 内置的LocalContext可以获取当前组件所在的上下文,强转为启动页的Activity后即可直接拿到Intent对象:

import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.LocalContext
import android.app.Activity

@Composable
fun TargetPage() {
    // 直接获取当前Activity的Intent
    val intent = (LocalContext.current as Activity).intent
    
    // 读取对应key的数据,按实际传递的类型选择对应的get方法
    val userId = intent.getStringExtra("user_id") ?: ""
    val isVip = intent.getBooleanExtra("is_vip", false)
    
    // 后续业务逻辑
}

如果你的Composable可能在非Activity上下文场景使用,可以增加安全判断避免强转崩溃:

val intent = remember {
    val context = LocalContext.current
    if (context is Activity) context.intent else null
}

方案2:封装为可复用扩展函数

把读取逻辑封装成通用扩展,后续任意Composable都可以直接调用读取参数:

@Composable
fun <T> rememberIntentExtra(key: String, defaultValue: T): T {
    val context = LocalContext.current
    return remember(key, defaultValue) {
        val intent = (context as? Activity)?.intent ?: return@remember defaultValue
        @Suppress("UNCHECKED_CAST")
        intent.extras?.get(key) as? T ?: defaultValue
    }
}

// 使用示例
@Composable
fun OrderDetailPage() {
    val orderId = rememberIntentExtra("order_id", "")
    val orderPrice = rememberIntentExtra("order_price", 0L)
}

注意事项

  • 该方案支持读取所有Intent可传递的类型,包括基础类型、Parcelable对象、Serializable对象等
  • 如果你的Composable依附于Fragment使用,逻辑完全通用,Fragment依附的Activity同样可以拿到启动时传入的Intent

内容的提问来源于stack exchange,提问作者S Haque

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 05:24:01