Intent意图
Android基本的设计理念是鼓励减少组件间的耦合,因此Android提供了Intent。Intent提供了一种通用的消息系统,他允许在你的应用程序与其他的应用程序间传递Intent来执行动作和产生事件。
使用Intent可以划分三种类型的核心组件:Activity(活动),Service(服务),Broadcast(广播)
Intent的常用属性
1,Component (应用程序中有很多Activity,根据ComponentName决定要启动某一个Activity)
2,Action (指定下一个Activity的功能)
3,Data (传输了什么数据) Uri数据
4,Extras (存放数据) Bundle
5,Category (类别,在该属性中可通过一个字符串来表示启动窗口时符合的类别)
6,Flags (启动标识值)
显示意图(explicit) 和 隐式意图(implicit)
显示意图:调用Intent.setComponent() / Intent.setClassName() /Intent.setClass()
等方法明确指定了要激活的组件名称的Intent显示意图,显示意图明确指定了要激活的组件是哪个组件。
Intent intent= new Intent(this, B.class) intent.setClassName("com.lydia.day01", "com.lydia.day01.MainActivity3"); intent.setClass(TelPhoneActivity.this, MainActivity3.class); intent.setComponent(new ComponentName("com.tarena.day01","com.tarena.day01.MainActivity3"));
隐式意图:没有明确指定组件的Intent,而是通过设置一些Intent Filter来让系统去筛选合适的Acitivity去启动。
主要利用Intent的action属性和Category属性
AndroidManifest.xml中
<Activity android:name=".MainActiviy01"> <intent-filter> <action android:name="com.lydia.wh"></action> <category android:name="com.lydia.category.android"/> </intent-filter> </Activity>
Activity中:
intent.setAction("com.lydia.wh"); intent.addCategory("com.lydia.category.android"); startAvtivity(intent);
注意:这样是匹配不了的,因为startActivity(intent)的方法内部为Intent增加了下面这个类别:
<category android:name="android.intent.category.DEFAULT"/>
所以:我们定义的activity如果接受implicit intent的话,intent-filer就一定要加上android.intent.category.DEFAULT这个category。
Data匹配
1,如果intent-filter 中加入:
<data android:scheme="wuhan" android:host="www.baidu.com" android:path="/charles"> </data>
则必须和:wuhan://www.027tarena.com/charles 来匹配,否则不成功
intent.setData(Uri.parse("wuhan://www.baidu.com/charles"));
2,如果intent-filter 中加入:
<data android:mimeType="image/*"></data> <--匹配图片-->
则:
intent.setDataAndType(Uri.parse("wuhan://www.baidu.com/charles"), "image/jpeg");
Intent传值:
发送代码:
// intent.putExtra("123", "123");
// intent.putExtra("456", "456");
---------------------
Intent intent = new Intent(...);
Bundle bundle = new Bundle();
bundle.putString("param", "value");
intent.putExtras(bundle);
context.startActivity(intent);
--------------------------
传入对象:Entity实体类一定要实现序列号接口
//传递一个对象:方法1,Entity要实现Serializable接口
extras.putSerializable("user", (Serializable) p);
//传递一个对象:方法2,Entity要实现Parcelable接口
// extras.putParcelable("user", (Parcelable) p);
===============================
接收代码:
intent = this.getIntent();
// String ss = intent.getStringExtra("123");
// String high = intent.getStringExtra("456");
---------------------
Bundle bunde = intent.getExtras();
String name = bunde.get("param");
---------------------
Person p = (Person) intent.getSerializableExtra("user");
//Person p = (Person) intent.getParcelableExtra("user");
相关推荐
Android-Intent详解
Android_Intent详解
android Activity& android Intent详解, 入门级别
android_Intent详解, 关于android中intent的使用有关的东东
androidintent详解参照.pdf
Android-Intent详解.doc
ZX-Android-Intent详解 让你更快了解
博客《intent详解(二)》对应的源码合集,博客地址:http://blog.csdn.net/harvic880925/article/details/38406421
代码示例说明Android页面跳转,并且叙述了Activity和Intent的用法原理, 透视分析Bundle类的使用介绍
Intents and Intent Filters 三种应用程序基本组件——activity, service和broadcast receiver——是使用称为intent的消息来激活的。Intent消息传递是一种组件间运行时绑定的机制. intent是Intent对象, 它包含了...
本文主要讲解Android Activity与Intent的知识,这里整理了相关资料并附有示例代码,有兴趣的小伙伴可以参考下
主要介绍了Android 隐式Intent的实例详解的相关资料,隐式意图就是在不明确设置激活对象的前提下寻找最匹配的组件,需要的朋友可以参考下
在sendBroadcast,startActivity时,我们会用到Intent。 Intent可以携带一些数据,比如基本类型数据int、Boolean,或是String,或是序列化对象,Parcelable与Serializable。 Intent传递数据时,如果数据太大,可能...
Android+Intent机制实例详解 Android+Intent 大家不得不看啊!
Android_Intent和Intent_Filter详解
Android+Intent机制实例详解.rar,详细的介绍了,android中的intent知识,可以下载下来看看哟
Android-Intent使用方法详解 配合(http://blog.csdn.net/daiyibo123/article/details/51227160)博客查看。使用Android stdio编写。
android intent 应用实例详解,很详细的文档