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