Activity--intent
来源:互联网 发布:paxos算法和zookeeper 编辑:程序博客网 时间:2024/05/22 06:52
intent :
1 作用:intent提供了一种通用的消息系统,它允许你的应用程序与其他应用程序间传递Intent来执行动作和产生事件
2 intent包含内容:action(要执行的动作),data,category(类别,被执行动作的附加信息),component(指定intent的目标组件的类名称),extra,type(数据类型)
Action,也就是要执行的动作(系统)
constant
Target component
Action
ACTION_CALL
activity
Initiate a phone call.
ACTION_EDIT
activity
Display data for the user to edit.
ACTION_MAIN
activity
Start up as the initial activity of a task, with no data input and no returned output.
ACTION_SYNC
activity
Synchronize data on a server with data on the mobile device.
ACTION_BATTERY_LOW
broadcast receiver
A warning that the battery is low.
ACTION_HEADSET_PLUG
broadcast receiver
A headset has been plugged into the device, or unplugged from it.
ACTION_SCREEN_ON
broadcast receiver
The screen has been turned on.
ACTION_TIMEZONE_CHANGED
broadcast receiver
The setting for the time zone has changed.
Data,也就是执行动作要操作的数据
Android中采用指向数据的一个URI来表示,如在联系人应用中,一个指向某联系人的URI可能为:content://contacts/1。对于不同的动作,其 URI数据的类型是不同的(可以设置type属性指定特定类型数据)。如:打电话为tel:URI,访问网络为http:URI,而由content provider提供的数据则为content: URIs。
一般情况下Date属性通常用于向Action属性提供操作的数据。
URI描述
动作
说明
http://web_address
android.intent.action.VIEW
启动Web浏览器
content://contacts/people/1
android.intent.action.EDIT
更新id=1的联系人数据
content://contacts/people/
android.intent.action.VIEW
浏览所有人的数据
tel:123
android.intent.action.CALL
拨打电话
tel:123
android.intent.action.VIEW
浏览电话123的数据
content://contacts/people/1
android.intent.action.DIAL
拨打id=1的联系人电话
type(数据类型),显式指定Intent的Date所指定Uri对应的数据类型(MIME)。一般Intent的数据类型能够根据数据本身进行判定,但是通过设置这个属性,可以强制采用显式指定的类型而不再进行推导。
category(类 别),被执行动作的附加信息。例如 :action为ACTION_MAIN,category为LAUNCHER_CATEGORY 表示Intent 的接受者应该在Launcher中作为顶级应用出现;action为ACTION_MAIN,category为CATEGORY_HOME,显示桌面。而ALTERNATIVE_CATEGORY表示当前的Intent是一系列的可选动作中的一个,这 些动作可以在同一块数据上执行。还有其他的为
Constant
Meaning
CATEGORY_BROWSABLE
The target activity can be safely invoked by the browser to display data referenced by a link — for example, an image or an e-mail message.
CATEGORY_GADGET
The activity can be embedded inside of another activity that hosts gadgets.
CATEGORY_HOME
The activity displays the home screen, the first screen the user sees when the device is turned on or when the HOME key is pressed.
CATEGORY_LAUNCHER
The activity can be the initial activity of a task and is listed in the top-level application launcher.
CATEGORY_PREFERENCE
The target activity is a preference panel.
component(组件),指定Intent的目标组件的类名称。通常 Android会根据Intent 中包含的其它属性的信息,比如action、data/type、category进行查找,最终找到一个与之匹配的目标组件。但是,如果 component这个属性有指定的话,将直接使用它指定的组件,而不再执行上述查找过程。指定了这个属性以后,Intent的其它所有属性都是可选的。
extras(附加信息),是其它所有附加信息的集合。使用extras可以为组件提供扩展信息,比如,如果要执行“发送电子邮件”这个动作,可以将电子邮件的标题、正文等保存在extras里,传给电子邮件发送组件。
注意:
我们需要什么时候加android.intent.category.DEFAULT呢?
1、要弄清楚这个问题,首先需要弄明白什么是implicit(隐藏) intent什么是explicit(明确) intent。
Explicit Intent明确的指定了要启动的Acitivity,比如以下Java代码:
Intent intent= new Intent(this, B.class)
Implicit Intent没有明确的指定要启动哪个Activity ,而是通过设置一些Intent Filter来让系统去筛选合适的Acitivity去启动。
2、intent到底发给哪个activity,需要进行三个匹配,一个是action,一个是category,一个是data。
理论上来说,如果intent不指定category,那么无论intent filter的内容是什么都应该是匹配的。但是,如果是implicit intent,android默认给加上一个CATEGORY_DEFAULT,这样的话如果intent filter中没有android.intent.category.DEFAULT这个category的话,匹配测试就会失败。所以,如果你的 activity支持接收implicit intent的话就一定要在intent filter中加入android.intent.category.DEFAULT。
例外情况是:android.intent.category.MAIN和android.intent.category.LAUNCHER的filter中没有必要加入android.intent.category.DEFAULT,当然加入也没有问题。
1 不同Activity跳转,显式意图和隐式意图
2 显示意图:
Intent i=newIntent();
i.setClass(MainActivity.this, SecondActivity.class);
startActivity(i);
Intent i=newIntent();
i.setComponent(new ComponentName(SecondActivity.this, ThirdActivity.class));
startActivity(i);
i.setClassName(SecondActivity.this,ThirdActivity.class.getName());
3 隐式意图:注意activity必须设置DEFAULT类型
i.setAction("hello");
i.addCategory("abc");
startActivity(i);
<intent-filter>
<categoryandroid:name="android.intent.category.DEFAULT"/>
<action android:name="hello"/>
<category android:name="abc"/>
</intent-filter>
举例:
如果在activity中通过如下隐式意图的代码启动一个activity
Intent i = new Intent();
i.setAction(Intent.ACTION_CALL);
i.setData(Uri.parse("tel:222"));
startActivity(i);
在打电话的应用中,打电话的activity界面的manifest配置应该如下:
<intent-filter>
<action android:name="android.intent.action.CALL" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="tel" />
</intent-filter>
举例:
Intent intent = newIntent();
intent.setAction("com.hoo.kay");
//设置数据URI与数据类型匹配
//intent.setData(data);
//intent.setType(type);注意这个方法会清除setData的内容,所以如果既要设置类型与数据,那么使用setDataAndType
intent.setDataAndType(Uri.parse("hoo://www.hoo.com/person"), "image/gif");
startActivity(intent);
被隐式启动的activity的配置:
<activityandroid:name="Intent2DateActivity">
<intent-filter>
<action android:name="com.hoo.kay"/>
<categoryandroid:name="android.intent.category.DEFAULT"/>
<data android:host="www.hoo.com" android:scheme="hoo" android:mimeType="image/gif" android:path="/person"/>
</intent-filter>
</activity>
注意:
对于一个Action字符串,系统有可能会找到一个Activity能处理这个Action,也有可能找到多个Activity,也可能一个都找不到。
1、找到一个Activity
很简单,直接打开这个Activity。这个不需要解释。
2、找到多个Acyivity
系统会提示从多个activity中选择一个打开。
3、一个Activity都没找到
一个都没找到的话,程序就会出错,会抛出ActivityNotFoundException。比如随便写一个action字符串:
4 传递数据:
5 普通的数据:两种方式:Bundle、putExtra
Activity 关闭后返回的数据:
- Activity&Intent
- Activity--intent
- Activity & Intent
- Activity-Intent-Intent filters
- Intent与Activity介绍
- Activity 、Intent深入解析
- Activity与Intent
- Activity和Intent示例
- Android Activity和Intent
- Activity和Intent机制
- Android--Activity和Intent
- Activity 、Intent深入解析
- Activity和Intent机制
- Activity和Intent
- Android Activity Intent 机制
- Activity和Intent
- intent activity action
- 解析Activity、Intent、Service
- iOS学习日记(第一天)
- C语言中的变量&命名规范
- Android经典底部选项卡集成方式之二
- 二、安装SVN及配置
- FastGUI教程
- Activity--intent
- Win7 远程桌面限制IP
- unity3d 插件 Fast Shadows 快速投影
- codevs2627题解:村村通
- 0-1背包问题
- unity3d 插件uSpeak Voice Chat 网络音频聊天
- hdu1171big events in hdu【多重背包模板】【01背包】
- 堆排序
- printf函数的另一用法