显式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)那么,任何的东西都不能通过它的审核。

 

可以把应用想象成一个饮水机,意图过滤器就是用来过滤水的。那么当一个饮水机(应用)没有过滤器的时候,我是不是宁愿让它不能通过审核给人喝?没过滤过的很容易有很多有害的物质。没过滤过的你敢喝?。

当我们有过滤器了,心里就放心点了,就能够喝通过了过滤器过滤的水(相当于使用通过了审查的应用)。

 

那么,接下来又有一个疑问了。

怎么进行意图的过滤?

 

答案当然是要一层一层的过滤啦。

  显式Intent与隐式Intent的功能与使用方法解析

 

       图中的data为URI和MIME类型。

       只要有一条路径能通过,那就是通过了,就能使用该程序的部分特定功能了。

 

       如果想更详细的查看关于Intent的方面,请查看android官方文档。