今天挑出一节专门来说一下使用intent和intentfilter进行通信。

场景:一个Activity启动还有一个Activity。

前面已经讲了Fragment的切换,Fragment顾名思义是基于碎片切换的,假如我们要切换屏幕,或者是service组件等等,这就要用到Intent。

此外还想说明一下,Intent还具有非常好的设计思想在里面的。它将各种“启动意图”封装成一个一致编程模型,利于高层次的解耦。

1、Intent属性

  • Component属性
先来看一段代码:
<span style="white-space:pre">		</span>Intent intent = new Intent();
ComponentName componentName = new ComponentName(this, EventsActivity.class);
intent.setComponent(componentName);
startActivity(intent);

这段代码的功能是用作从当前的activity启动到EventsActivity。

针对ComponentName这个类:(intent.setComponent(componentName);)
构造方法:
public ComponentName(String pkg, String cls)

public ComponentName(Context pkg, String cls) 

public ComponentName(Context pkg, Class<?> cls)<span style="white-space:pre">	</span>//上面代码中使用到的构造,一般也是经常用法

再来看Intent类里面的一段源代码:

public Intent setClass(Context packageContext, Class<?> cls) {
mComponent = new ComponentName(packageContext, cls);
return this;
} public Intent setClassName(String packageName, String className) {
mComponent = new ComponentName(packageName, className);
return this;
} public Intent setClassName(Context packageContext, String className) {
mComponent = new ComponentName(packageContext, className);
return this;
}

我想我不用多说了的,懂java的人都知道的。。。

  • Action、Category属性与intent-filter的配置
首先,先来看一下intent-filter配置:这个配置一般写在AndroidManifest.xml:

<activity
android:name="com.xmind.activity.TestActivity"
android:label="@string/title_activity_test" > <intent-filter >
<span style="white-space:pre"> </span><action android:name="com.xmind.intent.action.TEST_ACTION" /> <category android:name="android.intent.category.DEFAULT" />
</intent-filter> </activity>

intent-filter里面包括了action和category,这两个标签与Intent里面action和category属性是一一相应的。



来看下一段代码:
Intent intent = new Intent();
intent.setAction("com.xmind.intent.action.TEST_ACTION");
intent.addCategory("android.intent.category.DEFAULT");
startActivity(intent);

这个作用和上面是一样的,通过这两种方式,我们都能够启动其它的activity。通常我们将Component这样的方式称为“显式Intent”,顾名思义,另外一种Action的方式称为“隐式Intent”,作用都一样的,一般开发中为了让程序更具可读性,採用显式的方式比較多。

此外,看一下以下的标准Action和Category表:



2、Intent为Activity之间传值

前面是已经说了启动切换的问题,那如今假设有从当前的activity携带值进行跳转到还有一个Activity,这个应该怎么操作呢?
这里我们须要使用到Intent的Extra属性:
以下先看一段代码:
<span style="white-space:pre">	</span>Intent intent = new Intent();
intent.setAction("com.xmind.intent.action.TEST_ACTION"); intent.putExtra("test1", 1); Bundle bundle = new Bundle();
bundle.putBoolean("test2", false);
bundle.putSerializable("test3", new Person("Mr.稻帅",25)); intent.putExtras(bundle); startActivity(intent);

从上面能够看出,通过Bundle这个类,我们能够构造随意类型的參数,并且这样的方式极力推荐的。

详细操作方法,请查阅其API。

那怎么样接收參数呢?
看以下代码: 
<span style="white-space:pre">		</span>Intent intent = getIntent();
Bundle bundle = intent.getExtras(); Person person = (Person) bundle.getSerializable("test3"); textView = (TextView) findViewById(R.id.person_name);
textView.setText(person.getName()); textView = (TextView) findViewById(R.id.person_age);
textView.setText(person.getAge()+""); System.out.println(bundle.getInt("test1"));
System.out.println(bundle.getBoolean("test2"));
System.out.println(bundle.getSerializable("test3"));

从上面代码能够看到,还是使用Bundle这个类。











android笔记6——intent的使用的更多相关文章

  1. Android笔记:intent

    一.显式intent如下:(1)在intent构造函数传入两个activity文件名Intent intent = new Intent(FirstActivity.this, SecondActiv ...

  2. Android开发学习笔记:Intent的简介以及属性的详解【转】

    一.Intent的介绍 Intent的中文意思是“意图,意向”,在Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述 ...

  3. 【转载】Android开发学习笔记:Intent的简介以及属性的详解

    http://liangruijun.blog.51cto.com/3061169/634411/ 一.Intent的介绍 Intent的中文意思是“意图,意向”,在Android中提供了Intent ...

  4. Android应用开发学习笔记之Intent

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Intent是什么呢?来看Android官网上的定义: An intent is an abstractdescri ...

  5. 【转】Android Activity和Intent机制学习笔记----不错

    原文网址:http://www.cnblogs.com/feisky/archive/2010/01/16/1649081.html Activity Android中,Activity是所有程序的根 ...

  6. Android Activity和Intent机制学习笔记

    转自 http://www.cnblogs.com/feisky: Activity Android中,Activity是所有程序的根本,所有程序的流程都运行在Activity之中,Activity具 ...

  7. Android笔记(七十四) 详解Intent

    我们最常使用Intent来实现Activity之间的转跳,最近做一个app用到从系统搜索图片的功能,使用到了intent的 setType 方法和 setAction 方法,网上搜索一番,发现实现转跳 ...

  8. Android笔记--View绘制流程源码分析(一)

    Android笔记--View绘制流程源码分析 View绘制之前框架流程分析 View绘制的分析始终是离不开Activity及其内部的Window的.在Activity的源码启动流程中,一并包含 着A ...

  9. Android安全之Intent Scheme Url攻击

    0X01 前言 Intent scheme url是一种用于在web页面中启动终端app activity的特殊URL,在针对intent scheme URL攻击大爆发之前,很多android的浏览 ...

随机推荐

  1. Redis Destop Manager不能访问虚拟机

    虚拟机centOS中安装Redis,主机Redis Destop Manager不能访问虚拟机Redis server的解决方案 今天在学些redis的时候碰到个问题,发现主机Redis Destop ...

  2. linux 怎么使用一个c/c++库

    linux 怎么使用一个c/c++库 使用一个库,库有动态和静态之分. 静态库只要能够编译通过,运行时就没有提示缺少这个库可能,因为把这个库就是这个使用者的一部分了.动态库.两部分.1 库信息的注册 ...

  3. UNIX下改动时间简单一例

    UNIX下改动时间简单一例 仅仅输入date就显示当前的工作站时间,假设有root超级用户权限,加上參数能够改动 工作站的时间. 格式:date mmddHHMM[cc]yy mm--月份,dd--日 ...

  4. 怎样用Java编写一段代码引发内存泄露

    通过下面步骤能够非常easy产生内存泄露(程序代码不能訪问到某些对象,可是它们仍然保存在内存中): 应用程序创建一个长时间执行的线程(或者使用线程池,会更快地发生内存泄露). 线程通过某个类载入器(能 ...

  5. hdu 1063 Exponentiation 大数

    Problem Description Problems involving the computation of exact values of very large magnitude and p ...

  6. python语言学习2——安装python

    python是跨平台的,可以,在各种操作系统上安装 window平台下安装python,安装步骤: 下载安装包 下载地址:https://www.python.org/ftp/python/3.5.0 ...

  7. 处理json中影响解析的多余引號

    在xml中,敏感字符是尖括号,在json中,敏感字符是引號,上文中我们介绍了怎样处理xml中的敏感字符.本文说说怎样处理json中的敏感字符. 思路与上文同样,不再赘述.直接上代码: json–> ...

  8. MySQL 模拟Oracle邻接模型树形处理

    数据库对层次结构的处理模型有好多种,能够依据自己的需求来设计模型.当然最简单的也是最easy设计的模型就是所谓的邻接模型.在这方面,其它数据库比方Oracle 提供了现成的分析方法 connect b ...

  9. 国内云存储对比: 阿里云、腾讯云、Ucloud、首都在线

    阿里云的数据存储<http://www.aliyun.com/product/rds/> RDS — 关系型数据库服务(Relational Database Service,简称RDS) ...

  10. HGE项目升级时遇到的问题及解决方式记录

    主要是记录在把2003版本的hge项目升级为2013时遇到的问题及解决方案. Q1: 错误 3error LNK2019: 无法解析的外部符号 "public: __thiscall hge ...