笔记 Intent对象的属性:

一个Intent对象实质上是一组被捆绑的信息,它可以是对Intent有兴趣的组件的信息,也可以是Android系统感兴趣的信息
Intent对象的属性及其作用:

Component name 指定为处理Intent对象的组件名称
Action Intent要完成的一个动作
Category 用来对执行动作的类别进行描述
Data 向Action提供要操作的数据
Extras 向Intent组件添加附件信息
Flags 指示Android程序如何去启动一个Activity

Component name(组件名称):

可选属性,用来设置Inetnet对象的组件名称,它的属性值是一个ComponentName对象,要创建一个ComponentName,需要指定包名和类名,这就可以唯一的确定一个组件类,这样应用程序就可以根据给定的组件类去启动特定的组件
如果设置了,Intent对象会被发送给指定类的实例,如果没有设置,Android使用Intent中的其他信息来定位合适的目标组件,Component name可以通过setComponent(),setClass()或setClassName()方法设置,并通过getComponent()方法读取

setComponent()方法:

setComponent()方法用来为Intent设置组件,语法格式:

public Intent setComponent(ComponentName component)

component 要设置的组件名称
使用该方法时,需要先创建android.content.ComponentName对象构造方式为:
ComponentName(Context context,Class<?> cls)
或 ComponentName(String pkg,String cls)

context是Context(上下文)对象,可以使用”当前Activity名.this”指定,第一个cls用于指定要打开的Activity的class对象,pkg用于指定包名,第二个cls用于指定要启动的Activity的完整类名(包括包名)
例:

Intent intent = new Intent();
ComponentName componentName = new ComponentName(MainActivity.this,DetailActivity.class);
intent.setComponent(componentName);

Intent intent = new Intent();
ComponentName componentName = new ComponentName(“com.mingrisoft”,”com.mingrisoft.DetailActivity”);
intent.setComponent(componentName);

setClass()方法:

用来为Intent设置要打开的Activity类,语法格式:

public Intent setClass(Context packageContext,Class<?> cls)

packageContext Context(上下文)的对象,可以使用”当前Activity名.this”指定
cls 要打开的Activity的class对象
例:

Intent intent = new Intent();
			intent.setClass(MainActivity.this,DetailActivity.class);

setClassName()方法:

用来为Intent设置要打开的Activity名称,语法格式:

public Intent setClassName(Context packageContext,String className)

getComponent()方法:

用来获取与Intent相关的组件,语法格式:

public ComponentName getComponent()

返回值 与Intent相关的组件名称,通过它可以获取Intent对象对应的包名和类名
例:

ComponentName componentName = getIntent().getComponent();
Log.i(“MainActivity”,”包名:” + componentName.getPackageName()” +类名”+componentName.getShortClassName());

Action(动作):

Action属性用来指定将要执行的动作,它很大程度上决定了Intent如何构建,特别是后面将要介绍的Data(数据)和Extras(附加)属性,应该定义组件能够处理的Intent对象的整个协议,而不仅仅是单独的定义一个Action属性,在Intent类中,定义了一系列action常量,其目标组件包括Activity和Broadcast两类

标准Activity动作(用于启动Activity的标准动作):

常量 对应字符串 说明
1 ACTION_MAIN android.intent.action.MAIN 作为初始的Activity启动,没有数据输入输出
2 ACTION_VIEW android.intent.action.VIEW 将数据显示给用户
3 ACTION_ATTACH_DATA android.intent.action.ATTACH_DATA用于指示一些数据应该附属于其他地方
4 ACTION_EDIT android.intent.action.EDIT 将数据显示给用户用于编辑
5 ACTION_PICK android.intent.action.PICK 从数据中选择一项,并返回该项
6 ACTION_CHOOSER android.intent.action.CHOOSER 显示一个Activity选择器
7 ACTION_GET_CONTENT android.intent.action.GET_CONTENT 允许是用户选择特定类型的数据并将其返回
8 ACTION_DIAL android.intent.action.DIAL 使用提供的数字拨打电话
9.ACTION_CALL android.intent.action.CALL 使用提供的数据给某人拨打电话
10.ACTION_SEND android.intent.action.SEND 向某人发送消息,接收者未指定
11.ACTION_SENDTO android.intent.action.SENDTO 向某人发送消息,接收者已指定
12.ACTION_ANSWER android.intent.action.ANSWER 接听电话
13.ACTION_INSERT android.intent.action.INSERT 在给定容器中插入空白项
14.ACTION_DELETE android.intent.action.DELETE 从容器中删除给定数据
15.ACTION_RUN android.intent.action.RUN 无条件运行数据
16.ACTION_SYNC android.intent.action.SYNC 执行数据同步
17.ACTION_PICK_ACTIVITY android.intent.action.PICK_ACTIVITY 选择给定的Intent的Activity,返回选择的类
18.ACTION_SEARCH android.intent.action.SEARCH 执行查询
19.ACTION_WEB_SEARCH android.intent.action.WEB_SEARCH 执行联机查询
20.ACTION_FACTORY_TEST android.intent.action.FACTORY_TEST 工厂测试的主入口点

除了自定义的Action,开发人员还可以自定义Action字符串来启动应用程序中的组件,这些新定义的字符串一定要用该应用程序的包名作为前缀

一个Intent对象的Action通过setAction()方法来设置,通过getAction()方法读取

setAction()方法:

setAction()方法用来为Intent设置动作,语法格式:

public Intent setAction(String action)

action 要设置的Action名称

getAction()方法:

用来获取Intent的Action名称,语法格式:
public String getAction()

Data(数据):

通常用于向Action提供要操作的数据,它可以是一个URI对象,通常情况下包括数据的URI和MIME类型,不同的Action有不同的数据规格,其采用”数据类型:数据”的格式

例:

浏览网页 http://网页地址
拨打电话 tel:电话号码
发送短信 smsto:短信接收号码
查找SD卡文件
file:///sdcard/目录或者文件
显示地图 geo:坐标,坐标
联系人信息 content://联系人信息

当匹配一个Intent到一个能够处理数据的组件时,明确其数据类型(它的MIME类型)和URI很重要,比如说一个能够显示图像数据的组件,不应该被调用去播放一个音频文件

在多数情况下,数据类型能够从URI中推测,特别是content:URIs,它表示位于设备上的数据且被内容提供者(Content Provider)控制,但是,类型还能够显式地设置,具体的方法有:

setData()方法:

用来为Intent设置URI数据,语法格式:

public Intent setData(Uri data)

data 要设置的数据的URI
例:
设置联系人信息中id为1的联系人数据:
intent.setData(Uri.parse(content://”com.android.contacts/contacts/1”));

setType()方法:

用来为Intent设置数据的MIME类型,语法格式:

public Intent setType(String type)

type:要设置的数据的MIME类型,例,要设置类型为照片,可以指定为image/,要设置类型为视频,可以指定为video/
例:

intent.setType(“image/*”);

setDataAndType()方法:

用来为Intent设置数据及其MIME类型,语法格式:

public Intent setDataAndType(Uri data,String type)

data: 要设置的数据的URI
type: 要设置的数据的MIME类型

例:
指定数据为SDCard上的pictures目录下的img01.png图片

Uri uri = Uri.fromFile(new File(Environment.getExternalStorageDirectory().getPath() + “/pictures/img01.png”));
intent.setDataAndType(uri,”image/*”);

putExtra(String,String)方法:

设置发送信息时信息内容
String1:设置要发送的信息类型
String2:设置要发送的信息内容

读取数据时常用的两种方法:

getData()方法:

用来获取与Intent相关的数据,语法格式:

public Uri getData()

例:
要获取当前intent相关数据的URI

Uri uri = intent.getData();

getType()方法:

用来获取与Intent相关的数据的MIME类型,语法格式:

public String getType()

例:
要获取当前intent对象的数据类型

String type = intent.getType();

Category(种类):

**这个属性用来对执行动作的类别进行描述,开发人员可以在一个Intent对象中指定任意数量的Category**

addCategory()方法:

	**用来为Intent添加种类信息,语法格式:**

public Intent addCategory(String category)
例:
要设置Category为系统桌面:

Intent intent = new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(“android.intent.category.HOME”);

removeCategory()方法:

用来从Intent中删除指定的种类信息,语法格式:

public void removeCategory(String category)

例:
要移除设置为系统桌面的种类信息:

intent.removeCategory(“android.intent.category.HOME”);

getCategories()方法:

用来获取所有与Intent相关的种类信息,语法格式:

public Set<String> getCategories()
例:
要获取所有与Intent相关的种类信息

Set<String> set = intent.getCategories();

Extras(附加信息):

用于向Intent组件添加附加信息,通常采用键值对的形式保存附加信息

putExtras()方法:

用来为Intent添加附加信息,语法格式:

public Intent putExtras(Bundle extras)

extras:保存附加信息的Bundle对象
例:
创建一个Bundle对象,保存名称信息,并通过putExtras()方法添加到Intent对象中:

Bundle bundle = new Bundle();
bundle.putCharSequence(“name”,”mr”); //保存名称信息
intent.putExtras(bundle);

getExtras()方法:

用来获取Intent中附加的信息,语法格式:

public Bundle getExtras()

utExtras()方法和getExtras()方法通常用来在多个Activity之间传值

Flags(标志):

主要用来指示Android程序如何去启动一个Activity
Task是一组以栈模式聚集到一起的Activity组件的集合
默认的系统不包含图形Task管理功能,尽量不要使用FLAG_ACTIVITY_MULTIPLE_TASK标识,除非能够提供给用户一种方式—可以返回到已启动的Task

setFlags()方法:

用来为Intent设置标志,多次使用会将之前的替换掉,语法格式:

public Intent setFlags(int flags)

例:
要设置新的Activity不在历史Stack中保留,用户一旦离开它,这个Activity自动关闭:

intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);

addFlags()方法:

用来为Intent添加标志,多次使用将会添加多个标志,语法格式:

public Intent addFlags(int flags)

例:
要设置在新的Task里启动Activity:

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

getFlags()方法:

用来获取Intent的标志,语法格式:

public int getFlags()

例:
要获取Intent中保存的标志并在LogCat面板中输出:

Log.i(“标志”,String.valueOf(intent.getFlags()));
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值