- 显式Intent
//其中this代指FirstActivity作为上下文,而第二个参数为目标页面 //SecondActivity::class.java相当于Java中SecondActivity.class //使用这种方式来启动Activity,Intent的“意图”非常明显,因此我们称之为显式Intent button1.setOnClickListener { val intent = Intent(this, SecondActivity::class.java) startActivity(intent) }
- 隐式Intent
/* 它并不明确指出想要启动哪一个Activity, 而是指定了一系列更为抽象的action和category等信息,然后交由系统去分析这个Intent, 并帮我们找出合适的Activity去启动 */ //首先AndroidManifest.xml,添加如下代码 <activity android:name=".SecondActivity" > <intent-filter> <action android:name="com.example.activitytest.ACTION_START" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> /* 然后修改button1的点击事件 由于android.intent.category.DEFAUL是一种默认的category 所以不需要我们额外指定category */ button1.setOnClickListener { val intent = Intent("com.example.activitytest.ACTION_START") startActivity(intent) } //如果我们想要指定自定义的category,就需要用到addcategory()方法 button1.setOnClickListener { val intent = Intent("com.example.activitytest.ACTION_START") intent.addCategory("com.example.activitytest.MY_CATEGORY") startActivity(intent) } //同时还需要在<intent-filter>中再添加一个category的声明,以免找不到指定category <activity android:name=".SecondActivity" > <intent-filter> <action android:name="com.example.activitytest.ACTION_START" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="com.example.activitytest.MY_CATEGORY"/> </intent-filter> </activity>
使用隐式Intent,不仅可以启动自己程序内的Activity,还可以启动其他程序的Activity
例如,调用系统浏览器
/*
首先指定了Intent的action是Intent.ACTION_VIEW
然后通过Uri.parse()方法将一个网址字符串解析成一个Uri对像
再调用Intent的setData()方法将这个Uri对象传递进去
*/
button1.setOnClickListener {
val intent = Intent(Intent.ACTION_VIEW)
intent.data = Uri.parse("https://www.baidu.com")
startActivity(intent)
}