Activity之Intent隐式启动

使用Intent实现页面跳转,同时传递数据的方式分为两种,一种是显示启动,另一种是隐式启动。

显示启动暂不做分析,下面介绍隐式启动(笔记):

思路:隐式启动最关键的是要配置IntentFilter,而IntentFilter又分为action、category和data,所以这三点做到了,就能正确启动Activity。

1、action

action是一个字符串,action的匹配规则是Intent中的action必须能够和过滤规则中的action匹配,这里说的匹配是指action的字符串值完全一样。一个过滤规则中可以有多个action,那么只要Intent中的action能够和过滤规则中的任何一个action相同即可匹配成功。

2、category

category也是一个字符串,系统预定义了一些字符串,同时我们也可以定义自己的category。category的匹配规则和action不同,如果Intent中含有category,不管有几个,它都必须是匹配规则中定义过的。(这是它和action最大的区别,每一个必须是匹配规则也就是IntentFilter中定义过的category)

如果Intent中没有匹配category,系统默认添加category“android.intent.category.DEFAULT”

3、data

data的匹配规则和action类似,如果IntentFilter中定义了data,那么Intent中也要有定义了data。

data的语法结构如下:

<data android:scheme="string"
        android:host="string"
        android:port="string"
        android:path="string"
        android:pathPattern="string"
        android:pathPrefix="string"
        android:mimeTyppe="string"/>

从上述data的语法结构中可以看出,data分为两部分:mimeType和URI.其中mimeType是媒体类型,比如image/jpeg,audio/mpeg4-generic和video/*等,可以表示图片、文本、视频等不同的媒体格式。

URI结构如下所示:

<scheme>://<host>:<sport>/[<path>|<pathPrefix>|<pathPattern>]

具体示例如下:

content://com.example.project:200/folder/subfolder/etc
http://www.baidu.com:80/search/info

下面是具体解释:

scheme:URI的模式,有http、file、content等,如果URI中没有指定媒体类型(scheme),那么URI是无效的。

host:URI的主机名,如www.baidu.com,如果host没有指定,那么URI也是无效。

port:端口号

path:完整的路径信息

pathPattern:完整的路径信息,可以包含通配符“*”,表示0个或多个任意字符,需要注意的是通配符前面需要添加“\\”

pathPrefix:路径的前缀信息

示例一个完整的隐式启动过程:

Activity:

Intent intent=new Intent("com.myj.xxxx");
       intent.addCategory("com.myj.Xxxx");
       intent.setDataAndType(Uri.parse("file://abc"),"text/plain");
       startActivity(intent);

在AndroidManifest.xml中配置IntentFilter

<Intent-filter>
    <data android:mimeType="image/mpeg" android:scheme="http" .../>
    <data android:mimeType="audio/*" android:scheme="http" .../>

</IntentFilter>

猜你喜欢

转载自blog.csdn.net/weixin_38664232/article/details/84333320