关于Intent
下面是取自Android开发者文档中对Intent的简介:
Intent 用于通过描述您想在某个 Intent对象中执行的简单操作(如“查看地图”或“拍摄照片”)来启动另一应用中的某个 Activity。这种 Intent 称作隐式 Intent,因为它并不指定要启动的应用组件,而是指定一项操作并提供执行该操作所需的一些数据。
当您调用 startActivity() 或startActivityForResult()并向其传递隐式 Intent 时,系统会将 Intent 解析为可处理该 Intent 的应用并启动其对应的 Activity。如果有多个应用可处理 Intent,系统会为用户显示一个对话框,供其选择要使用的应用。
想了解更多可进入https://developer.android.google.cn/guide/components/intents-common?hl=zh_cn
Intent简单来说就是意图,想干嘛。
显式跳转
1、在同一个应用程序
2、不同的界面(Activity)之间的跳转
3、明确指定从哪个页面切换到那个页面
实现同一个应用中两个不同页面的跳转:
mJump.setOnClickListener {
//明确指定从当前页面跳转到MediaActivity页面
Intent(this,MediaActivity::class.java).apply {
startActivity(this)
}
}
返回有不同的实现方式:
方式1:
跳转其实就是将跳转之后的当前页面放入到任务栈之中,当finish()之后就将该页面推出任务栈,显示任务栈中的下一个也就是跳转前的页面。
mBack.setOnClickListener {
finish()
}
方式2:
在AndroidMainfest.xml中做配置
其实其内部实现就是方式1的代码
方式2的效果:
数据传递和回传
putExtra ->只能传递系统默认的数据类型
利用Bundle传递数据
隐式跳转
不同程序之间进行页面的跳转
为什么叫隐式跳转:比如我们跳转到第三方的应用界面(微信支付、京东商城),对于我们自己的程序来说并不知道是具体跳转到哪个Activity,所以叫做隐式跳转。可以以同样的方式理解显示跳转。
隐式跳转到其他程序的页面
- 实现方式:添加意图过滤器,向外部提供意图过滤。
- 意图可以是系统提供的,也可以是自己定义的。
- 添加意图其实对程序本身没有任何影响
- 如果希望外部程序能够启动这个页面 必须设置category为Default
- 若果同时希望外部传递过来数据 就必须定义数据格式data
左边为MediaPlayer这个app中AndroidManifest.xml的意图配置,右边为另一个项目中的点击事件