详解显示意图和隐式意图

原创 2016年08月29日 21:32:57
意图在android的应用开发中是很重要的,明白了意图的作用和使用后,对开发会有很大帮助。如果没有把意图搞懂,以后开发应用会感觉缺些什么。   
    意图的作用:   
    1、激活组件  
    2、携带数据   
    3、意图的匹配(运用到隐式意图)  
 	android基本的设计理念是鼓励减少组件间的耦合,因此android提供了Intent(意图),用意图激活其他组件。Intent提供了一种通用的消息系统,它允许在你的应用程序与其他应用程序间传递Intent来执行和产生事件。使用Intent可以激活android应用的三个核心组件:活动、服务和广播接收器。Intent代表了要执行的某一种想法,要干的某一件事情。   
	意图可划分为显式意图和隐式意图。
显示意图:
Intent.setClassName(packageName,className)不指定动作和数据,直接指定需要操作的组件。
等于该语句:new Intent(this,CalcActiviy.class)
packageName:当前包名,可以使用getPackageName()获得
className:需要激活的组件必须要与清单文件中的类名一致
例如:com.itheima.rpcalc.CalcActiviy
开启界面的方法startActivity(intent)
隐式意图:
每次创建一个新的activity界面都要记得在manifest文件中声明一下
在intent-filter节点中
action节点下 android.name一般前面跟包名,后面指定要完成的动作
使用隐式意图开启界面的时候需要指定<action/> <data/> <category/>节点
其中data节点对应setType
Intent.setAction(action)
Intent.setDate(date)  
隐式意图相对于显示意图更加灵活一点
代码展示:
在FirstActivity中点击按钮跳到SecondActivity中(用隐式意图):   
在AndroidManifest中   
< activity android:name=".SecondActivity"  android:label="@string/app_name">   
             <intent-filter>   
                 <action android:name="cn.itcast.xiao.li" />   
                 <action android:name="cn.itcast.xiao.zhang" />  
                 <category android:name="android.intent.category.DEFAULT" />   
                 <category android:name="cn.itcast.category.li" />   
                 <data android:scheme="itcast" 
 				android:host="www.itcast.cn" 
 				android:path="/person"/>  
                 <data android:mimeType="image/gif"/>   
             </intent-filter>  
代码:onCreate部分    
public void onCreate(Bundle savedInstanceState) {   
         super.onCreate(savedInstanceState);   
         setContentView(R.layout.main);       
         Button button = (Button) this.findViewById(R.id.button);   
         button.setOnClickListener(new View.OnClickListener() {   
             @Override   
             public void onClick(View v) {   
                 Intent intent = new Intent();   
                 intent.setAction("cn.itcast.xiao.li");   
                 intent.setDataAndType(Uri.parse("itcast://www.itcast.cn/person"),  "image/gif");  
                 startActivity(intent);   
             }   
         });   
 }   
其中,action的name随便设,category的name也可以随便设,不过android.intent.category.DEFAULT是调用startActivity时内部自动生成的。         在意图过滤器中可以有多个动作和类别,但意图只能定义一个动作,所以只要定义的这个动作(action)和意图过滤器中的任意一个匹配就可以成功。类别(category)也是,只要匹配其中一个就行,不必匹配所有。但是,如果定义的类别在意图过滤器中找不到,就会报错,也就是说意图中定义的动作和意图在过滤器中必须有。         注意:若intent.setDataAndType(Uri.parse("itcast://www.itcast.cn/person"), "image/gif");分开写,即:intent.setData(),intent.setType()(括号中的东西略)时,就算是都匹配也会报错。原因:在setType()文档中有一句话,This method automatically clears any data that was previously set by setData(Uri).也就是说,当设置了setType时会自动清除setData中的内容。所以,解决方法:写成intent.setDataAndType(Uri.parse("itcast://www.itcast.cn/person"), "image/gif");这样就正确了。  
总结:
显示意图:必须制定要激活的组件的完整包名和类名
(一般激活自己应用的组件的时候采用显示意图)
隐式意图:只需要指定需要完成的动作和数据就行
(好处是应用程序之间没有耦合,激活别人写的应用,隐式意图不需要关心对方的包名和类名)
版权声明:本文为博主原创文章,未经博主允许不得转载。

Android之显示意图与隐式意图

首先,需要了解Intent(意图)有俩种设置应用的类方式,分别是构造方式通过反射方式和利用intent的setClassName方式通过类的全路径来设置意图的应用。 应用程序中可以通过构造方式来激活...
  • moxuelang
  • moxuelang
  • 2015年04月08日 00:14
  • 847

Intent--显示意图和隐式意图

一:显示意图 显式意图:调用Intent.setComponent()或Intent.setClass()方法明确指定了组件名的Intent为显式意图,显式意图明确指定了Intent应该传递给哪个组...
  • yinzhijiezhan
  • yinzhijiezhan
  • 2015年10月17日 18:10
  • 1372

显式意图和隐式意图的区别小结

显式意图和隐式意图的特点 是否需要配置清单文件意图过滤器 显式(不需要) 隐式(需要) 是否能够被其他的应用程序启动 显式(不需要) 隐式(需要) 启动效率 显式(高) 隐式(低) 实际应用场景 显式...
  • u011480946
  • u011480946
  • 2016年12月11日 21:25
  • 279

Android学习记录(7)—Intent中显示意图和隐式意图的用法

Intent(意图)主要是解决Android应用的各项组件之间的通讯。 Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的...
  • loongggdroid
  • loongggdroid
  • 2014年01月05日 19:07
  • 20975

Android显式意图、隐式意图、意图过滤器(intent-filter)、意图间传值

Android显式意图、隐式意图、意图过滤器(intent-filter)、意图间传值
  • WanTianwen
  • WanTianwen
  • 2014年02月06日 18:33
  • 5393

Activity中Intent的含义以及显式意图与隐式意图区别

通过Intent寻找组件的方式分为两种 1.显式意图 即在通过Intent启动Activity时,需要明确指定激活组件的名称。 另外还可以根据目标组件的包名、全程路径来开启组件调用i...
  • youhongyan
  • youhongyan
  • 2017年03月20日 21:28
  • 115

intent 显式意图和隐式意图

Android中鼓励在程序的设计中尽量减少组件的耦合,因此Android中提供了一系列减少耦合的做法,表层我们熟悉的比如xml的布局文件和Activity分离,除此之外,还有一个重要的内容就是inte...
  • hardcum2
  • hardcum2
  • 2012年07月16日 22:53
  • 8408

Android中显示意图和隐式意图

一.什么是意图:    为减少组件间的耦合,Android提供了Intent(意图),用意图激活其他组件。intent是一种通用的消息系统,允许你的应用程序和其他的应用程序之间传递Intent来执行...
  • u013068440
  • u013068440
  • 2015年10月29日 21:59
  • 650

利用隐式意图打开各种文件和界面

1 打开HTML文件的intent Uri uri = Uri.parse(filePath).buildUpon().encodedAuthority("com.android.htmlf...
  • z_fishLong
  • z_fishLong
  • 2016年04月23日 13:55
  • 1624

activity的四种启动模式,隐式意图

activity、任务和栈======================================= 同一个任务中才会在同一个回退栈中 所有的activity都出栈后,任务就消失了 ...
  • u011252541
  • u011252541
  • 2015年09月02日 08:35
  • 545
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:详解显示意图和隐式意图
举报原因:
原因补充:

(最多只允许输入30个字)