略谈Android之Intent
前言:大家都知道Android程序的实现一般都由四大组件构成:
- Activity :Android程序实现功能的主体,提供了和客户交互的界面,也提供了和后台交互的功能。
- Service :是一个没有界面的activity,主要用于后台运行的程序。
- Broadcast :是当前程序和系统之间通信的工具。
- ContentProvider :android程序,管理资源的一种工具。
上面这4个组件都需要在manifest里面注册才能够使用,manifest就相当于android程序的大管家。当然光有组件还不够,要想实现组件与组件之间数据(或叫资源)的传递,离不开一个关键“人物”,那就是Intent类。至于什么是Intent呢?下面我就简单的跟大家介绍一下。
一、什么是Intent?
Intent这个单词在英文里的意思是“目的,意图”。放在计算机里是什么意思呢?简单来说就是,Android系统建立了一种机制来协助应用程序之间数据(或资源)的传递和通信。那么怎么传递呢?不用担心,Android为此创建了一个类,那就是Intent。你可以把它看成一个桥梁或纽带,它以应用程序之间和上述4大组件之间的数据交互为使命。所以它的意图很明显了,就是数据(资源)的传递。
Intent在程序当中又是一种运行时绑定机制,也就是说它可以在程序运行的时候连接任意两个不同组件。通过Intent,你可以向Android系统进行请求,Android系统会根据你的请求内容选择相应的组件进行响应。
还有一个原因,之所以要用Intent来建立连接,就是为了降低程序之间的耦合度。(耦合就是指两个应用程序之间的依赖关系)
二、创建Intent的三种方式:
1. Intent intent = new Intent(起始组件对象,目标组件类.class)
2. Intent intent = new Intent()
Intent.setClass(起始组件对象,目标组件对象.class)
3. 获取上一个Activity传递过来的intent对象(Intent = getIntent())
三、Intent类中包括的一些成员变量(或者属性)
1.mComponent (目的组件):它是ComponentName的类型,是制订组件间跳转的源组件和目标组件的包名,用于显示意图。它明确指定了Intent目标组件的类名称。这个组件包括包名称和类名称,而且必须要声明在manifest文件中。
2.mAction(动作):它表示操作的动作,是一个字符串常量。它是一个默认的字符串,是提前预定义好的,就是让所在当前这个activity为项目的入口,并且需要在Manifest文件中的intent-filter标签中设置。
3.mCategory(类别) : 被启动组件的类别。一个Intent中可以包含多个category描述的信息。要注意,在manifest文件中要同时注册action和category才行,它们一般一起使用,在代码当中,如果没有指定category的话,就必须使用默认的Category。
4.mData(数据): 该参数是Uri类型存放操作的数据,就是比如:访问的网址,拨打电话等,作用就是向Action提供操作的数据。所谓Uri就是统一资源标识符(包括:http://;主机名;资源索引值;),android框架系统定义了Uri类来处理Intent对象要操作的数据。
5.mType(数据类型): 显示指定数据类型(MIME)。一般Intent的数据类型能够根据数据本身进行判定,但是通过设置这个属性,可以强制采用显示指定类型而不再进行推导。一般前面是大类型后面是小类型。
Type属性在Xml文件中只能够命名为mimeType:(下图为例)
<intent-filter>
<action android:name="com.jaoco.SECOND_ACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
<data
android:scheme="http"
android:host="www.jaovo.com"
android:path="/android"
android:port="8090"
android:mimeType="image/png"
/>
</intent-filter>
设置Type属性值的方法:public void setType(String type)
设置data和type属性值的方法:public void setDataAndType(Uri uri,String type)如果要同时设置Data和Type的值,只能用这个方法,因为setType()和setData()都会默认将对方设置为null。
6.mExtras(扩展信息):Intent类中携带的所有的数据都包装在这个类中。
7.mFlags(标志位):它是一个期望意图运行的模式。
略谈Android之Intent的更多相关文章
- 从AIDL开始谈Android进程间Binder通信机制
转自: http://tech.cnnetsec.com/585.html 本文首先概述了Android的进程间通信的Binder机制,然后结合一个AIDL的例子,对Binder机制进行了解析. 概述 ...
- 浅谈android代码保护技术_ 加固
浅谈android代码保护技术_加固 导语 我们知道Android中的反编译工作越来越让人操作熟练,我们辛苦的开发出一个apk,结果被人反编译了,那心情真心不舒服.虽然我们混淆,做到native层,但 ...
- Android笔记---Intent实现Activity跳转
学了之前的Android控件以及布局,我们就能够做一些UI的设计了,这里我结合之前的知识.以一个小的登录项目来解说下Activity之间跳转. 先看下效果图: 1.登录界面: 2.点击登录按钮跳转到另 ...
- Android 笔记 Intent and Bundle day7
学习了Intent与Bundle的使用,进行应用中的交互 package com.example.intent; import android.app.Activity; import android ...
- 浅谈Android应用保护(一):Android应用逆向的基本方法
对于未进行保护的Android应用,有很多方法和思路对其进行逆向分析和攻击.使用一些基本的方法,就可以打破对应用安全非常重要的机密性和完整性,实现获取其内部代码.数据,修改其代码逻辑和机制等操作.这篇 ...
- Android 通过 Intent 传递类对象或list对象
(转:http://www.cnblogs.com/shaocm/archive/2013/01/08/2851248.html) Android中Intent传递类对象提供了两种方式一种是 通过实现 ...
- 浅谈Android中的startActivityForResult和setResult方法
引言 我们知道,如果想打开一个新的Activity我们可以使用startActivity方法.今天我们介绍的startActivityForResult不仅可以打开全新的Activity,而且当新的A ...
- 安卓开发_浅谈Android动画(四)
Property动画 概念:属性动画,即通过改变对象属性的动画. 特点:属性动画真正改变了一个UI控件,包括其事件触发焦点的位置 一.重要的动画类及属性值: 1. ValueAnimator 基本属 ...
- Android中Intent传递对象的两种方法(Serializable,Parcelable)
今天要给大家讲一下Android中 Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是 Bundle.putP ...
随机推荐
- PostQuitMessage, PostThreadMessage( WM_QUIT )
http://blogs.msdn.com/b/oldnewthing/archive/2005/11/04/489028.aspx Why is there a special PostQuitMe ...
- ST10 Bootstrap Loader
Bootstrap Loader The built-in bootstrap loader (BSL) of the ST10F269 provides a mechanism to load th ...
- JavaScript创建Map对象(转)
JavaScript 里面本身没有map对象,用JavaScript的Array来实现Map的数据结构. /* * MAP对象,实现MAP功能 * * 接口: * size() 获取MAP元素 ...
- 【JavaScript】一些注意点
1.var与没有var的区别 没 2.全局变量和局部变量的速度 3.函数内部的var和外部的var的区别 4.var m =new Array();与var m = [];区别
- 一天掌握Android JNI本地编程 快速入门
一.JNI(Java Native Interface) 1.什么是JNI: JNI(Java Native Interface):java本地开发接口 ...
- TIDB ---NEW SQL
https://github.com/pingcap/tidb http://www.pingcap.com/ Quick Start Run TiDB with Docker You can qui ...
- 实现O(1)获取最大最小值的栈----java
原文:http://blog.csdn.net/sheepmu/article/details/38459165 实现O(1)获取最大最小值的栈和队列----java 一.如何实现包含获取最小值函数的 ...
- 类的__slots__属性
为什么有"slots"属性? 默认情况下,python对象队象的每个实例(instance)都会有一个字典来存储该实例的属性,这样做的好处在于运行时期每个对象可以任意设置新的属性. ...
- nmon的安装以及使用
在做性能的时候都需要监控服务器的各项资源,这里使用的是nmon,小巧,而且比较好用,记录安装过程 在linux下创建nmon目录 方便放文件 mkdir /usr/local/nmon cd /usr ...
- SQL中VARCHAR与NVARCHAR存储区别
DATALENGTH 与LEN的查询区别 插入结果 总结:DATALENGTH计算字节长度,LEN计算字符串长度 VARCHAR(2)是指允许存取字节长度小于或等于2的字符串 NVA ...