首页 > 代码库 > 显式Intent与隐式Intent的功能与使用方法解析。
显式Intent与隐式Intent的功能与使用方法解析。
显式Intent与隐式Intent的功能与使用方法解析。
Intent,在中文中的意思是意图。就是想要做的事。
而使用startActivity(Intentintent)或者startActivityForResult(Intentintent)或者别的使用它的方法,形象地说就是指 去做你想要做的事。(do what you want to do)
首先,大体的介绍一下它们的使用差别:
1.Explicit Intent(显式意图):主要用于调用自身应用程序的组件(activity,service),或者其他程序的明确想调用的一直的组件。(这个比较少用,因为很少会这样调用)
2.Implicit Intent(隐式意图):主要用于启动除本程序以外的程序。
然后讲讲各自的使用方法吧。
一:ExplicitIntent:
使用前首先应该有一个Intent吧?我们先来创建一个。
创建方法。Intent intent = newIntent(Context context,Class<?> class);
后面的那个class参数呢,是一个类的反射。
你也可以记作为目标Activity所在类的 类名.class;
使用:
startActivity(intent)或startActivityForResult(intent);
然后就可以了。
二.ImplicitIntent
我们以两个角色的身份来进行解析。
首先,调用者身份。(就是想跳到别的应用程序的当前应用程序)
创建隐式Intent的主要的方法:
初始带Action:Intent(String action)
空的Intent: Intent();
初始同时带Action和Uri: Intent(String action, Uri uri);
其实这三种方法使用上差别不大,只是初始设置的参数多一点的构造方法有时候简便一点而已。
Intent也可以在构建之后再设置或者改变参数值。
如:intent.setAction(String action) 还有Uri设置:setData(Uri uri),MIME类型:setType()等
需要注意的一点是,如果需要同时设置URI和MIME类型的时候,使用setDataAndType()方法,因为当你分别调用setData和setType时,他们会令到他们两个中的另一个失效。为什么呢?因为其实URI中也有设置Type的,会冲突,覆盖另一个设置。
还有别的属性,也是非常关键的。建议查阅Android开发文档。因为我个人说的再好,也不如你自己动手去寻找,去探索。
调用隐式的Intent也和调用显式的一样。
隐式调用Intent的时候呢,如果你想启动的具有某种功能的程序有多个,比如在你使用你个人想发送文件的时候,有很多个程序出来让你选吧?比如蓝牙,QQ什么的。如果可以实现某个功能的程序有多个,就会出现一个列表来让你进行选择。只有单个程序的时候直接启动这个程序。
那么通常来说自己不知道启动什么程序,而系统自己就启动了,这样用户的体验效果是不是很不好?这时,就可以来实现一个尽管只有单个程序也出现选择框的功能:Chooser.
Chooser本身也是一个Intent,只是它是一个附加有选择器的Intent。
使用示例:
Intent intent =new Intent();
…
Intent chooser =intent.createChooser(intent,title);
这里的title就是选择框的标题字符串。
2.接收隐式Intent
如果你想让你的程序能接受来自与别的程序的隐式的Intent,那么该如何做?
在清单文件(Manifest)里声明你能接收某个类型的隐式Intent。
如:
<activityandroid:name="ShareActivity">
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
</intent-filter>
</activity>
首先来解析一下Intent-filte的中文翻译吧.Intent(意图)的过滤器。
那么为什么要有这个过滤器啊?
首先你来想一下,如果没有过滤器这东西,那么,当你想要启动具有某个功能的程序的时候,系统就不能识别哪些程序能用哪些功能,就哔哩啪啦的把所有的引用都列出来。这样是不是很不好啊?
系统默认,如果一个应用中没有任何的意图过滤器(Intent-filter)那么,任何的东西都不能通过它的审核。
可以把应用想象成一个饮水机,意图过滤器就是用来过滤水的。那么当一个饮水机(应用)没有过滤器的时候,我是不是宁愿让它不能通过审核给人喝?没过滤过的很容易有很多有害的物质。没过滤过的你敢喝?。
当我们有过滤器了,心里就放心点了,就能够喝通过了过滤器过滤的水(相当于使用通过了审查的应用)。
那么,接下来又有一个疑问了。
怎么进行意图的过滤?
答案当然是要一层一层的过滤啦。
图中的data为URI和MIME类型。
只要有一条路径能通过,那就是通过了,就能使用该程序的部分特定功能了。
如果想更详细的查看关于Intent的方面,请查看android官方文档。
显式Intent与隐式Intent的功能与使用方法解析。