Android Intent 总结
//打开指定网页
Intent intent = new
Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.google.com"));
startActivity(intent);
//进行关键字搜索
Intent intent = new
Intent(Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY,
"android"); //keywords: android
startActivity(intent);
//
Intent intent = new
Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:235345"));
startActivity(intent);
Uri.parse("prefix:num")
// “http:”或“https:”表示网络地址类型,
// “tel:”表示电话号码类型,“mailto:”表示邮件地址类型,等
在目标<data/>标签中包含了以下几种子元素,他们定义了url的匹配规则:
android:scheme
匹配url中的前缀,除了“http”、“https”、“tel”...之外,我们可以定义自己的前缀
android:host
匹配url中的主机名部分,如“google.com”,如果定义为“*”则表示任意主机名
android:port
匹配url中的端口
android:path 匹配url中的路径
// for example:
<activity android:name=".TargetActivity">
<intent-filter>
<action
android:name="com.scott.intent.action.TARGET"/>
<category
android:name="android.intent.category.DEFAULT"/>
<data
android:scheme="scott" android:host="com.scott.intent.data" android:port="7788"
android:path="/target" />
</intent-filter>
</activity>
<--
android:pathPrefix="/target"
scott://com.scott.intent.data:7788/target/hello
-->
Intent intent = new
Intent("com.scott.intent.action.TARGET");
intent.setData(Uri.parse("scott://com.scott.intent.data:7788/target"));//merge
startActivity(intent);
// put Bundle Data
Intent intent = new Intent("xxxxx");
Bundle bundle =
new Bundle();
bundle.putInt("id", 0);
bundle.putString("name",
"scott");
intent.putExtras(bundle);
startActivity(intent);
// get Bundle Data
Bundle bundle = intent.getExtras();
int id =
bundle.getInt("id");
String name = bundle.getString("name");
or
int id
= intent.getIntExtra();
String name = intent.getStringExtra();
也可以使用Intent的getIntExtra和getStringExtra方法获取,其数据源都是Intent中的Bundle类型的实例对象
以上涉及到了Intent的三个属性:
Intent包括以下属性:
1.action,要执行的动作
2.data和extras,即执行动作要操作的数据和传递到目标的附加信息
3.category,要执行动作的目标所具有的特质或行为归类
<category android:name="android.intent.category.LAUNCHER"
/>
几个常见的category如下:
Intent.CATEGORY_DEFAULT
(android.intent.category.DEFAULT) //默认的category
Intent.CATEGORY_PREFERENCE
(android.intent.category.PREFERENCE) //
表示该目标Activity是一个首选项界面
Intent.CATEGORY_BROWSABLE
(android.intent.category.BROWSABLE)
//指定了此category后,在网页上点击图片或链接时,系统会考虑将此目标Activity列入可选列表,供用户选择以打开图片或链接。
intent.addCategory(String category); //在为Intent设置category时,应使用addCategory(String category)方法向Intent中添加指定的类别信息,来匹配声明了此类别的目标Activity。
4.type:要执行动作的目标Activity所能处理的MIME数据类型
例如:一个可以处理图片的目标Activity在其声明中包含这样的mimeType:
<data
android:mimeType="image/*">
在使用Intent进行匹配时,我们可以使用setType(String
type)或者setDataAndType(Uri data, String type)来设置mimeType。
setType(String
type)
setDataAndType(Uri data, String type)
5.component,目标组件的包或类名称
在使用component进行匹配时,一般采用以下几种形式:
intent.setComponent(new
ComponentName(getApplicationContext(),
TargetActivity.class));
intent.setComponent(new
ComponentName(getApplicationContext(), "com.scott.intent.TargetActivity"));
intent.setComponent(new ComponentName("com.scott.other",
"com.scott.other.TargetActivity"));
其中,前两种是用于匹配同一包内的目标,第三种是用于匹配其他包内的目标。需要注意的是,如果我们在Intent中指定了component属性,系统将不会再对action、data/type、category进行匹配。
Activity:
startActivity(), startActivityForResult()
Service:
startService(), bindService()
Broadcasts:
sendBroadcast(), sendOrderedBroadcast(),
sendStickyBroadcast()
activity.setResult() -->
startActivityForResult()
+++++++++++++++++++++++++++++++++++++++++++++++++
Intent对象由以下六个部分组成:
1.Component
name
2.Action
3.Data
4.Category
5.Extras
6.Flags
Component name
Component
name即组件名称,是要处理这个Intent对象的组件名称。
组件名称对象由ComponentName类来封装,组件名称包含包名称和类名称,被声明在AndroidManifest.xml文件中。
组件名称通过
setComponent(),setClass(),setClassName()设置,通过getComponent()获取。
需要注意的是Component
name是一个可选项,如果被设置,那么Intent对象就显式指定了要转向的组件,如果没有被设置,则Intent对象需要根据其他信息进行筛选查找。
Action
Action是指Intent要完成的动作,是一个字符串常量。
ACTIONS:
ACTION_CALL,
ACTION_EDIT, ACTION_MAIN, ACTION_SYNC,
ACTION_BATTERY_LOW,
ACTION_HEADSET_PLUG, ACTION_SCREEN_ON,
ACTION_TIMEZONE_CHANGED
使用 setAction() 和 getAction()来设置和读取Action属性。
Data
Data属性是执行动作的URI和MIME类型,不同的动作有不同的数据规格。
比如,Action是ACTION_EDIT时,数据域将是文档的URI;Action是ACTION_CALL时,数据域是
tel: URI ,带有要拨打的电话号码;如果Action是 ACTION_VIEW,则数据域是http: URI。
当匹配intent和能够处理intent所带的数据的组件时,知道数据类型(MIME类型)是很重要的。比如,一个展示图像的组件不应该被叫去播放一个音频。
很多情况下,从URI可以看出数据类型,比如content:
URIs,表示数据是在设备上,但是是由content
provider控制。
数据类型也可以显式指定,比如setData()方法指定数据为URI,setType() 指定为MIME
type,setDataAndType() 指定它既为URI又为MIME type。读取的时候URI用getData(),MIME
type用getType()。
Category
Category是一个字符串,提供了额外的信息,有关于能够处理这个Intent对象的组件种类。
一个Intent对象中可以包含任意数量的category描述信息。
与category相应的方法有添加addCategory()、移除removeCategory()
和获取所有category getCategories() 。
Extras
传递给Intent的额外数据,以Bundle的形式定义,就是一些键值对。
数据可以被作为一个Bundle对象被使用,利用
putExtras() 和 getExtras() 方法。
Flags
各种类型的Flag。很多是用来指定Android系统如何启动activity,还有启动了activity后如何对待它。所有这些都定义在Intent类中。
+++++++++++++++++++++++++++++++++++++++++++++++++
<data
android:mimeType="video/mpeg" android:scheme="http">
<data
android:mimeType="audio/mpeg" android:scheme="http">
每一个<data>元素可以指定一个URI和一个数据类型(MIME media type)。
每一个URI包含下列属性:
scheme, host, port, path
如:scheme://host:port/path
例如,在下面的URI中:
content://com.example.project:200/folder/subfolder/etc
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。