什么是intent
Android中提供了Intent机制来协助应用间的交互与通讯,或者采用更准确的说法是,Intent不仅可用于应用程序之间,也可用于应用程序内部的activity, service和broadcast receiver之间的交互。
intent的属性
- component(组件):目的组件
-
action(动作):用来表现意图的行动首先介绍下系统动作的取值:
- ACTION_MAIN :App启动时的入口
- ACTION_VIEW :显示数据给用户,比如使用浏览器打开网址,用图片应用显示图片等
- ACTION_EDIT :显示可编辑的数据
- ACTION_CALL :拨号
- ACTION_DIAL :打电话,显示带拨号盘的页面,让用户可以进行拨号动作。
- ACTION_SEND:发短信,比如电子邮件应用或者一些社交应用
- ACTION_ANSWER :接电话
- ACTION_SEARCH :导航栏的search操作
action是模糊匹配,因此需要更加详细的信息才行,需要加入category和data,
-
category(类别):用来表现动作的类别,常见的系统category:
- CATEGORY_BROWSABLE:目标 Activity 允许本身通过网络浏览器启动,以显示链接引用的数据,如图像或电子邮件。
- CATEGORY_LAUNCHER:该 Activity 是任务的初始 Activity,在系统的应用启动器中列出。
- data(数据):(即uri)表示与动作要操纵的数据,Data 内容一般由 action 决定,比如 action 为 ACTION_VIEW,那么 Data 就可以是一个网址,也可以是图片之类的数据 uri。
- type(数据类型):对于data范例的描写,但是要注意同时设置时应该使用 setDataAndType()方法,防止互相抵消。同时指定 Uri 和 MIME 类型有助于 Android 系统找到接收 Intent 的最佳组件,例如可以响应 ACTION_VIEW 的组件可能有非常多,浏览器、播放器、图片应用等等。此时设置mimeType为"image/jpeg"或者video/mp4,则系统可以筛选出更合适的响应组件。
以下两种(Extra、Flag)属于附加的信息,不影响系统解析启动那个组件
- extras(扩展信息):扩展信息
- Flags(标志位):期望这个意图的运行模式(activity的启动模式)
intent类型分为两个类型,显式和隐式,component为显示类型,其余均为隐式类型。
显式使用(component的用法)
startActivity(Intent(this@SplashActivity,LoginActivity::class.java))
隐式使用
下面是调用系统拨号程序的例子:
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
Uri uri = Uri.parse("tel:"+"15960238696");
intent.setData(uri);
startActivity(intent);
安装apk的例子:
val intent = Intent(Intent.ACTION_VIEW)
intent.action = Intent.ACTION_VIEW
intent.addCategory(Intent.CATEGORY_DEFAULT)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
intent.setDataAndType(
Uri.fromFile(File(path)),
"application/vnd.android.package-archive"
)
startActivity(intent)
// 结束当前进程
Process.killProcess(Process.myPid())
application/vnd.android.package-archive其实是类型为apk文件类型
网友评论