android中在进行界面跳转时需要用到Intent,而Intent又分为显示Intent和隐式Intent。
显示Intent:通常给Intent指定了具体的组件的称为显示Intent,这种只会跳转到唯一一个界面。
Intent intent = new Intent();
//"com.lwx.myapp"为比如应用包名, "com.lwx.TestActivty1"为activity的className
intent.setComponent(new ComponentName("com.lwx.myapp", "com.lwx.TestActivty1"));
//跳转到TestActivty1
startActivity(intent);
实际使用中我们一般写成下面这种形式
Intent intent = new Intent(this, TestActivty1.class);
//跳转到TestActivty1
startActivity(intent);
隐式的Intent:这个一般是在AndroidManifest.xml文件中定义Activity时用到,<intent-filter>过滤器形式存在。
intent-filter有三个子元素,action、category、data,这个过滤有点类似struts中action映射,但是又有很大的区别,struts中的action是唯一的,而intent-filter中的action是可以存在多个,intent中设置一个action是可以对应多个Activity的。category是分类,我的理解是增加匹配的精确度,intent-filter中一般都必须包含
<category android:name="android.intent.category.DEFAULT" />,data占时没用到就没研究,在代码中隐式的跳转界面时如下:
Intent intent = new Intent();
intent.setAction("testAction");
intent.addCategory("testCategory");
//匹配<action android:name="testAction" />
//<category android:name="testCategory" />
//<category android:name="android.intent.category.DEFAULT" />
startActivity(intent);
通过上面的方式,页面可以跳转到按以下方式定义Activity中
<activity
android:name="com.example.androidbase.Activity1"
android:label="Activity1" >
<intent-filter>
<action android:name="testAction" />
<category android:name="testCategory" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
如果有多个Activity的匹配到,会弹出一个界面让用户选择跳转到那个界面
像这个方式我们其实也经常遇到,比如你在看短信时,短信中有一个链接,如果你手机中安装了多个浏览器,此时会要你选择使用那个浏览器。
intent-filter匹配规则
匹配规则为,首先匹配action,action中如果没有符合的就代表没有匹配到,匹配到action之后才考虑category。
action匹配规则是只要匹配到一个就可以了,比如有<action android:name="testAction" />和<action android:name="testAction2" />,intent.setAction("testAction");是可以匹配到的
category匹配规则为包含关系,就是代码中intent.addCategory("");增加的category(可以有add多个)在配置文件中intent-filter中必须要包含。比如
intent.setAction("testAction");
intent.addCategory("testCategory1");
可以匹配
<intent-filter>
<action android:name="testAction" />
<category android:name="testCategory1" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
也可以匹配
<intent-filter>
<action android:name="testAction" />
<category android:name="testCategory2" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
总之:
1、在代码中显示的发起intent调用时,由于已经明确的知道要start的组件,<intent-filter>中的配置对它是不起作用
2、在代码中隐式的发起intent调用时,是会到AndroidManifest.xml定义的组件中的<intent-filter>
逐个去匹配的,如果匹配到仅只一个就会start组件。有多个会要用户进行选择。
- 大小: 48.1 KB
分享到:
相关推荐
Android中Intent使用、数据回写(显)
源程序关于android平台中intent的使用小示例,仅供参考
通过一个实验,讲解Android的使用方法,总结详细
android activityIntent 传值 传对象
Java中使用的是Serializable,而谷歌在Android使用了自定义的Parcelable。 两种序列化方式的区别: 1.在使用内存的时候,Parcelable比Serializable性能高,推荐使用Parcelable类; 2.Serializable在序列化的时候会...
本文件介绍的是Anroid中Intent的使用方法,从谷歌中搜索内容;浏览网页;显示地图;路径规划;拨打电话;发送短信等简单功能实现
主要为大家详细介绍了Android利用Intent启动和关闭Activity的相关操作,感兴趣的小伙伴们可以参考一下
android中Intent传递对象的两种方法(Serializable,Parcelable) 简单而又详细的demo,欢迎下载
Android使用Intent实现Video功能
Android使用Intent实现Camera功能
Android+Intent机制实例详解 Android+Intent 大家不得不看啊!
可运行的Jar 博文链接:https://shenjichao2009.iteye.com/blog/1186319
android Intent例子源码android Intent例子源码android Intent例子源码android Intent例子源码android Intent例子源码android Intent例子源码
Android-Intent使用方法详解 配合(http://blog.csdn.net/daiyibo123/article/details/51227160)博客查看。使用Android stdio编写。
个人整理的Android Intent的使用介绍 Android 组件之间的信使Intent Android 中的数据存取和ContentProvider
前言 在sendBroadcast,startActivity时,我们会用到Intent。 Intent可以携带一些数据,比如基本类型数据int、Boolean,或是String,或是序列化...在Intent中传入一个Parcelable对象;例如传入一个bitmap对象。 代
Android使用Intent和Intentfilter进行通信,源于《疯狂Android讲义》值得学习
android 利用intent调用activity 简明精炼的例子 传递数据,并且有返回值
Android+Intent机制实例详解.rar,详细的介绍了,android中的intent知识,可以下载下来看看哟
Android7.0 Intent打开文件管理器 获取文件真实路径。虽然网上很多demo,但是没有一个能够兼容所有Android机的,去网上学习了然后自己亲测过手机分别有Android7.0/6.0/4.3个版本。