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

Android Intent 总结,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。