使用Intent启动组件

android应用程序的三大组件——Activities、Services、Broadcast Receiver,通过消息触发,这个消息就是Intent,中文又翻译为"意图"(我感觉读着不顺畅,还是读英文)。我们能够通过Intent去启动三大组件,而且通过Intent携带数据到其它组件中。本文来看一下怎么使用Intent启动组件,以及Intent的过滤规则。

Intent对象

首先来看Intent对象中包括的成员。

private String mAction;   //动作
private Uri mData;          //数据
private String mType;
private String mPackage;   //包名
private ComponentName mComponent;  //组件名 包括程序包名+类名,以及应用包名
private int mFlags;            //标志
private HashSet<String> mCategories;   //种类
private Bundle mExtras;    //附加信息
private Rect mSourceBounds;
private Intent mSelector;
private ClipData mClipData;

看Intent的源代码,主要包括以上成员。

Intent解析

Intent解析有两种方式:显式解析和隐式解析。

显式解析。我们直接传组件进入。打开这个指定的组件,比較简单,通常应用程序内使用。

比方我们创建一个显式的Intent:

Intent intent = new Intent(context, OtherActivity.class);

隐式解析,没有指定详细的组件,通过规则去匹配组件。通经常使用于多个程序之间的互相调用比較多。我们使用隐式解析式。action、data(包含URI和数据类型)、category都必须有。比方我们启动浏览器去打开一个网址,intent能够这样创建:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://blog.isming.me"));

上面没有填写category,创建Intent的时候会自己主动填写为default。

等待补充吧。

乱扯

好吧,本来像。会写的非常长的,可是真正想写的时候,发现就这么简单。也没什么好写的。下次多看看源代码。再看有没有要补充的。就酱紫了!

原文地址:http://blog.isming.me/blog/2014/06/15/use-intent-start-component/。欢迎转载,转载请注明出处。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

时间: 2024-10-13 07:29:23

使用Intent启动组件的相关文章

Intent进行组件通信的一些体会

Intent进行组件通信的原理 l  Intent协助应用间的交互与通讯 Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述.Android则根据此Intent的描述,负责找到对应的组建,将Intent传递给调用的组建,并完成组建的调用 l  Intent可以激活Android应用的三种类型的核心组建:Activity.Service.BroadcastReceiver l  可划分为:显示Intent[目标唯一]和隐士Intent[根据目标intentfilter进行筛选]

Activity、Task、Application关系+Intent启动Flag

什么是Android  Application? 简单来说,一个apk文件就是一个Application. 任何一个AndroidApplication基本上是由一些Activities组成,当用户与应用程序交互时其所包含的部分Activities具有紧密的逻辑关系,或者各自独立处理不同的响应. 这些Activities捆绑在一起成为了一个处理特定需求的Application,并且以".apk"作为后缀名存在于文件系统中. Android平台默认下的应用程序 例如:Email.Cale

Intent ,Bundle 组件 两个Activity 互相传值

第一个Activity 1 /** 2 * 3 */ 4 package com.flysnow.sina.weibo; 5 6 import android.app.Activity; 7 import android.content.Intent; 8 import android.os.Bundle; 9 import android.view.View; 10 import android.widget.Button; 11 import android.widget.EditText;

Android - 通过Intent启动Activity

通过Intent启动Activity 本文地址: http://blog.csdn.net/caroline_wendy 为了动态关联Activity界面,使用Intent启动.能够灵活绑定. 在Intent静态类中.定义Intent的内容: public static final String ACTION_HOME = "me.cxxxyx.CxxxyxIntent.ACTION_HOME"; 然后通过Intent启动startActivity(intent)其它的Activity

使用 Intent 启动系统摄像机

使用 Intent 启动系统摄像机来录制视频,对于那些要求不高的app来说是非常方便的.如果你想自定义一个录像机可以使用MediaRecorder来实现.具体代码以后补上. 使用Intent启动系统录像机代码: Activity.cs 代码 public class MainActivity extends Activity { Button btnStart; Button btnStop; VideoView videoView; int takeCode = 1; @Override pr

startActivity(intent); 启动 类文件出现 返回两次才可以到上级界面纠结

Intent intent = new Intent(); intent.setClass(School.this, Setting.class); startActivity(intent); 在纠结这个问题的时候也在考虑 是不是 .setClass 函数是否 前面个参数是设置 起始对象 startActivity(intent); 启动 类文件出现 返回两次才可以到上级界面纠结

Android 浏览器的研究(六)--- ADT调试通过Intent启动的Activity

今天遇到一个问题,在音乐应用里长按一个歌曲,在弹出菜单中选择搜索,在搜索选择框中选择浏览器.正常情况下应该打开浏览器并且使用默认的搜索引擎启动搜索,但是现在浏览器搜索界面并没有打开.首先想到的是打开浏览器工程,在相关位置设置断点,启动调试,发现一切处理正常,浏览器界面打开并正常启动了搜索过程.原来问题只发生在浏览器进程尚未启动,音乐应用使用Intent启动浏览器来进行搜索的情况下.这里分享一下这种情况下如何启动调试分析. 首先,该应用是其他应用通过Intent启动的,而我们需要调试它.在C/C+

intent 启动activity、service的方法

1.通过intent启动service. 通过传递一个Intent对象至Context.startService()将启动一个服务(或给予正在运行的服务以一个新的指令).Android调用服务的onStart()方法并将Intent对象传递给它. Intent stpServiceIn = new Intent(context, StpService.class); context.startService(stpServiceIn);

使用Intent启动图片裁剪时遇到的问题:Intent#setData()与Intent#setType()赋值问题

在做使用Intent启动图片裁剪时遇到一个问题: 分开调用Intent#setData();Intent#setType();这两个方法时,程序无法正确运行,但使用Intent#setDataAndType();程序正常运行. 原因分析: 查看Intent#setData(),Intent#setType()源码: public Intent setData(Uri data) { mData = data; mType = null; return this; } public Intent