Intent

Intent(意图)是android程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。Intent一般可用于启动Activity、启动Service以及发送广播等场景。
它主要分为种:显式Intent和隐式Intent

Intent构造函数文档


显式Intent

1. 启动Activity

button1.setOnClickListener{
    val intent = Intent(this, SecondActivity::class.java)
    startActivity(intent)

我们首先构建了一个Intent对象,第一个参数this也就是按钮自身所在的Activity作为上下文,第二个参数传入SecondActivity::Class.java作为目标Activity。接下来再通过startActivity()方法执行这个Intent即可启动新的Activity。
注意:kotlin的SecondActivity::Class.java写法就相当于java中的SecondActivity.class写法。

这种方式启动Activity,Intent的意图非常明显,称之为显式Intent。


隐式Intent

相比于显式Intent,隐式Intent并没有明确指定想要启动哪个Activity,而是指定了一系列更为抽象的action和category等信息。然后交由系统去分析这个Intent,并帮我们找到合适的Activity去启动。

1. 启动Activity

button1.setOnClickListener{
    val intent = Intent(Intent.ACTION_SEND)
    startActivity(intent)

隐式Intent的构造函数有许多。以上是其中之一。


Intent的一些使用方法

1. 传递参数

利用putExtra()方法。该方法有很多重载,下面的例子是其中之一。

val shareIntent = Intent(Intent.ACTION_SEND)
// 此重载第一个参数是键, 第二个参数是值(可以是多种类型)
shareIntent.putExtra("data", "some data")

2. 检查是否存在想要意图的Activity

示例

// Build the intent
val location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California")
val mapIntent = Intent(Intent.ACTION_VIEW, location)

// Verify it resolves
val activities: List<ResolveInfo> = packageManager.queryIntentActivities(mapIntent, 0)
val isIntentSafe: Boolean = activities.isNotEmpty()

// Start an activity if it's safe
if (isIntentSafe) {
    startActivity(mapIntent)
}
    
最后修改:2020 年 05 月 31 日
如果觉得我的文章对你有用,请随意赞赏