Android Intent 和 Intentfilter


一、概述


       在我们的 android 开发中如果你需要从一个 Activity 到另一个 Activity 那么就需要用到这个 Intent,android 中有四大件,在我看来 Intent 也应该归入四大组件中成为 android 第五大组件,这也标志着 Intent 在 android 开发中的重要性。那么下面就让我们进入 Intent 的世界。


二、Intent 启动各个组件的方法

Intent 可以启动一个 Activity 也可以启动一个 Service,那我们看一下下面的方法:

启动 Activity: startActivity 
启动 Service: bindService
                        startService
启动 Broadcast:sendBroadcasts( )

                             sendOrderedBroadcasts( )

                             sendStickyBroadcasts( )

 

三、Intent 中的各个属性



在 Intent 中一共包括七个属性:component,Action,Data,Type,Extra,Category,Flag

Component:通过指定 Component 来进行目标跳转,创建 Component 的方法有三种



①、Component(String pkg,String cls):cls要求为带包名的class全名,pkg为包名
②、Component(Context pkg,String cls):cls要求为带包名的class全名,pkg为对应的包
③、Component(Context pkg,Class<?> cls):创建pkg所对应的包下面的cls类对应的组件


在创建之后我们可以通过 setComponent 方法把 Component 设置到我们的 Intent 中。
第一个方法和我们的 setClassName 相对应,这里面需要填写包名和类名,需要注意的是,我们的包名和类名必须是全名
第二个方法对应的也是和 setClassName 相对应,只不过把第一个包名对应成了类本身。
第三个方法是我们经常用的显示跳转,对应的是 setClass 。



下面看一下三个 Component 创建的代码:


final ComponentName componentName = new ComponentName(this,SecondActivity.class);
        final ComponentName componentName1 = new ComponentName(this,"com.example.andy.intenttest.SecondActivity");
        final ComponentName componentName2 = new ComponentName("com.example.andy.intenttest","com.example.andy.intenttest.SecondActivity");


注意 :这个地方需要注意一下,如果 app 模块包含了某个module,那么最后打包的时候都会把module 的 Activity 打入 app 的 Manifest 里面,所以在 module 中使用第一种 Component 跳转是会成功的。

Action:这个属性也就是 Activity 可以响应哪些跳转可以在 AndroidManifest 中配置,跳转的时候通过 setAction 设置



              每个 Activity 可以配置多个 Action,也就是说一个 Activity 可以响应多种类型的 Action,在 Android 中有很多系统的
Action,我们可以通过设置许多系统的 Action 打到某些系统的功能。下面看一下代码:具体属性看这里


下面看一下我们自己设置的 Action:


<activity android:name=".SecondActivity">
            <intent-filter>
                <action android:name="xxxxx"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:scheme="andya"
                    android:host="andya.top"
                    android:path="/selectinfomation"
                    />
            </intent-filter>
        </activity>



从这段代码中我们可以看出 secondActivity 可以响应 xxxxx 的 aciton 的跳转,其实这样设置是非常不合理的,因为系统中有很多应用,有时候你的 action 和别人的 重复了,那么就会出现选择框的情况,所以我们最好通过自己的包名设置Action。


category:这个属性和 Action 的作用差不多,也是配置这个 Activity 响应哪些跳转。可以通过 addCategory 加入 intent

category category 属性大全看这里,有些时候需要和 Action 配合使用,这样可以达到一些效果,
例如:intent.setAction(Intent. ACTION_MAIN);
intent.addCategory(Intent. CATEGORY_HOME); 可以跳转到桌面

Data 和 Type 属性:这个属性其实是和 scheme 相联系的,通过配置这个属性来设置 Activity 响应哪个链接的跳转



1、data 中主要包括scheme,host,port,path,pathPrefix,pathPattern,mimeType,其中mimeType 主要是指定 Type的,pathPattern 主要是匹配 Data 属性的模板,pathPrefix 匹配Data 的前缀。

2、当使用 data 属性的时候 action 属性是必须指定的。intent 如果先设置了 data 属性后设置了 Type 属性,那么 data 的属性会被覆盖,如果先设置了 Type 属性,后设置了 data 属性,那么 type 属性会被覆盖。如果想设置两个 type 和data 属性可以用
setDataAndType。

3、如果没设置 path 那么就不能设置 pathPrefix 和 pathPattern

4、其实 Scheme 的作用就是当 webview 跳转的时候我们去对跳转的链接进行拦截,然后进行一系列的处理。

5、Type 用于设置能打开的文件的类型 */* 代表能打开全部的文件类型,所以,如果跳转不成功有可能是设置 type 的原因。


下面看一下我们自己设置的 Data:
<activity android:name=".SecondActivity">
            <intent-filter>
                <action android:name="xxxxx"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:scheme="andya"
                    android:host="andya.top"
                    android:path="/selectinformation"
                    />
            </intent-filter>
        </activity>



可以看到我们的 data 中 scheme 是 andya,host 为 andya.top path 为 selectinformation 那么这个 Activity 可以响应 andya:andya.top/selectinformation 这个链接,也就是说当系统中有这个链接跳转的时候就可以
到这个 Activity。

Flag:相当于向 Intent 添加控制旗标。在我的理解这个值就是操作启动与被启动的 Activity 在栈中是怎么操作的。可以通过
setFlag 加入到 Intent 中


它有几个默认的值,可以对 Activity 进行不同的操作。
当用隐式跳转的时候必须去指定一个 flag 值。



总结:

    本篇介绍了 Intent 的大部分基础知识,懂了这些基础知识之后就可以完成 Android 中大部分的跳转工作,其实 Intent 还有很多强大的功能,必须跳转指定的 Uri,发送短信等,这些其实和我们平常的跳转没有多少区别,读者可以自行查询。本文如果有什么问题可以自行评论,如有错误请指出,共同进步。 谢谢!








  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值